class Async::Semaphore

def wait

Wait until the semaphore becomes available.
def wait
	fiber = Fiber.current
	
	if blocking?
		@waiting << fiber
		Fiber.scheduler.transfer while blocking?
	end
rescue Exception
	@waiting.delete(fiber)
	raise
end