如何使用Celluloid Actor每隔n秒调用一次块?

时间:2014-05-01 02:52:56

标签: ruby multithreading thread-safety block celluloid

我试图创建一个Celluloid Actor,它可以接受& block作为参数,并且每隔n秒执行一次。但是,当我call循环中的every块时,它似乎永远不会做任何事情?

举个例子claass:

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计时器工作正常......但是看起来每个人都看不到这块?

任何人都可以了解我做错了什么?

更新:我注意到如果我将puts "tock" 移到下面@block.call它根本就不会输出......?< / p>

0 个答案:

没有答案