module Kernel
def Sync(&block)
@public Since `stable-v1`.
@parameter task [Async::Task] The task that is executing the given block.
@yields {|task| ...} The block that will execute asynchronously.
Run the given block of code synchronously, but within a reactor if not already in one.
def Sync(&block) if task = ::Async::Task.current? yield task elsif scheduler = Fiber.scheduler ::Async::Task.run(scheduler, &block).wait else # This calls Fiber.set_scheduler(self): reactor = Async::Reactor.new begin return reactor.run(finished: ::Async::Condition.new, &block).wait ensure Fiber.set_scheduler(nil) end end end