-
-
Notifications
You must be signed in to change notification settings - Fork 106
Open
Description
Hi.
I'm newbie for Ruby and I'm trying coroutine like something using Async and Ractor::Port.
# frozen_string_literal: true
require "async"
def f
Async do
n = Time.now
Async do
puts "async 1 before #{Time.now - n}"
sleep(0.5)
puts "async 1 after #{Time.now - n}"
end
Async do
puts "async 2 before #{Time.now - n}"
sleep(1)
puts "async 2 after #{Time.now - n}"
end
end
end
def g
port = Ractor::Port.new
Ractor.new port do |port|
Async do
sleep(1)
port.send(:message)
end
end
Async do
n = Time.now
Async do
puts "async 1 before #{Time.now - n}"
sleep(0.5)
puts "async 1 after #{Time.now - n}"
end
Async do
puts "async 2 before #{Time.now - n}"
port.receive
puts "async 2 after #{Time.now - n}"
end
end
end
~/.../ruby/my_gem_r4 $
and output is
[85] pry(main)> f
async 1 before 5.5424e-05
async 2 before 0.00047027
async 1 after 0.501706423
async 2 after 1.000711154
=> #<Async::Task:0x0000000000000688>
[86] pry(main)> g
async 1 before 0.000104577
async 2 before 0.000488231
async 2 after 1.001955307
async 1 after 1.002924576
=> #<Async::Task:0x0000000000000690>
[87] pry(main)>
But, I expected another result like below
[85] pry(main)> f
async 1 before 5.5424e-05
async 2 before 0.00047027
async 1 after 0.501706423
async 2 after 1.000711154
=> #<Async::Task:0x0000000000000688>
[86] pry(main)> g
async 1 before 0.000104577
async 2 before 0.000488231
async 1 after 0.502034231
async 2 after 1.002924576
=> #<Async::Task:0x0000000000000690>
[87] pry(main)>
That part that I think as a problem is output async 1 after's time difference.
Below is Gemfile.
# frozen_string_literal: true
# https://andycroll.com/ruby/read-ruby-version-in-your-gemfile/
# https://rubydoc.info/github/rubygems/rubygems/Gem/Version
ruby "~> 4.0.0"
source "https://rubygems.org"
# Specify your gem's dependencies in my_gem_r4.gemspec
gemspec
gem "rake", "~> 13.0"
gem "minitest", "~> 5.16"
gem "standard", "~> 1.54"
gem "pry", "~> 0.16.0"
gem "pry-reload", "~> 0.3"
gem "async", "~> 2.38", ">= 2.38.1"
Below is ruby version info.
~/.../ruby/my_gem_r4 $ ruby --version
ruby 4.0.2 (2026-03-17 revision d3da9fec82) +PRISM [aarch64-linux-android]
Thanks for read.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels