Sha256: df733aa60863a1bcded7f8d519ebd50267f56708a1bf85510439800df815ded7
Contents?: true
Size: 822 Bytes
Versions: 3
Compression:
Stored size: 822 Bytes
Contents
# frozen_string_literal: true # Released under the MIT License. # Copyright, 2019-2022, by Samuel Williams. # Copyright, 2020, by Brian Morearty. require_relative "../async/reactor" # Extensions to all Ruby objects. module Kernel # Run the given block of code synchronously, but within a reactor if not already in one. # # @yields {|task| ...} The block that will execute asynchronously. # @parameter task [Async::Task] The task that is executing the given block. # # @public Since `stable-v1`. # @asynchronous Will block until given block completes executing. def Sync(&block) if task = ::Async::Task.current? yield task else reactor = Async::Reactor.new begin return reactor.run(finished: ::Async::Condition.new, &block).wait ensure Fiber.set_scheduler(nil) end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
async-2.2.1 | lib/kernel/sync.rb |
async-2.2.0 | lib/kernel/sync.rb |
async-2.1.0 | lib/kernel/sync.rb |