# NOTE: gem install asynchronize
require "asynchronize"
module AsyncAwait
refine Module do
def async(mid)
include Asynchronize unless included_modules.include?(Asynchronize)
asynchronize mid
end
end
refine Kernel do
def await(*ths)
if ths.size == 1
ths.first.value
else
ths.map(&:value)
end
end
end
end
require "benchmark"
using AsyncAwait
class A
async def sleep!
t = rand * 2
sleep t
t
end
end
a = A.new
t = Benchmark.measure do
p await(a.sleep!, a.sleep!).sum
end
p t.real
view raw async_await.rb hosted with ❤ by GitHub