Ruby脚本中的异步、非阻塞后台执行

i34xakig  于 2023-01-16  发布在  Ruby
关注(0)|答案(1)|浏览(151)

我正在尝试以非阻塞方式执行一些代码。
在我的真实的场景中,这将是Ruby on Rails应用程序中一个代价高昂的SQL查询,然而,作为复制场景的测试,我创建了以下Ruby脚本:

#!/usr/bin/env ruby

require 'async'

puts 'hello'

Async do
  sleep 2
  puts 'hi'
end

puts 'there'

我期望看到:

hello
there

然而,我实际上得到的是:

hello
hi
there

两秒钟后。
我不关心异步调用的返回值--我只想在后台执行一些代码并立即退出。
在Ruby 3中有没有办法做到这一点?

jq6vz3qz

jq6vz3qz1#

使用线程可以轻松地完成此操作。

puts 'hello'

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

puts 'there'
``

相关问题