I am trying to execute some code in a non-blocking way.
In my real scenario, this would be an expensive SQL query in a Ruby on Rails app, however, as a test for replicating the scenario, I made this Ruby script:
#!/usr/bin/env ruby require 'async' puts 'hello' Async do sleep 2 puts 'hi' end puts 'there'
My expectation would be to see:
immediately. However, what I actually get, is:
hello hi there
after two seconds.
I don’t care about the return value of the async call — I just want to execute some code in the background and exit immediately.
Is there a way to do this in Ruby 3?
You easily do this using a thread.
puts 'hello' # Async == Thread Thread.new do sleep 2 puts 'hi' end puts 'there' ``