Simone
Simone

Reputation: 21262

Asynchronous, non-blocking background execution in Ruby script

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:

hello
there

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?

Upvotes: 1

Views: 257

Answers (1)

Chiara Ani
Chiara Ani

Reputation: 1083

You easily do this using a thread.

puts 'hello'

# Async == Thread
Thread.new do
  sleep 2
  puts 'hi'
end

puts 'there'
``

Upvotes: 2

Related Questions