我正在尝试创建一个可以接受 &block 作为参数并每 n 秒执行一次的赛璐珞演员。但是,当我call
从every
循环中阻塞时,它似乎从来没有做任何事情?
以这个示例类为例:
require 'celluloid/autostart'
class FooBar
include Celluloid
def initialize(&block)
@block = block
execute_block
every(2) do
puts "tick"
execute_block
end
end
def execute_block
puts "tock"
@block.call
end
end
如果我尝试以下操作:
a = FooBar.new { puts "Hi" }
然后我得到这个令人困惑的输出:
tock
Hi
tick
tock
tick
tock
tick
tock
tick
tock
tick
...
您可以看到,当我execute_block
第一次从every
块外调用时,它工作正常,并且您可以看到every
Timer 工作正常……但是似乎并不是每个人都调用了该块?
任何人都能够阐明我做错了什么?
更新:我注意到如果我移动puts "tock"
下面的@block.call
它根本不会得到输出......?