瘦服务器中的em.synchrony在需要使用后返回结果

时间:2012-09-21 11:52:52

标签: ruby-on-rails thin eventmachine

瘦服务器基于EventMachine,因此我无法从EM.synchrony块中阻止它。 但在这种情况下,输出为:2,1,但不是1,2。我该如何解决?

 EM.synchrony do
    update_ads ads_hash, invalid_ads, ip, params, user_agent, request
    EM::Synchrony::FiberIterator.new([1,2,3]).each do |i|
      # some http requests 
    end
    puts "1"  
    # EventMachine.stop
 end
 puts "2"

感谢您提前!

1 个答案:

答案 0 :(得分:2)

由于其异步性质,EM不保证执行顺序。 1仅在FiberIterator完成其工作后执行,而2则先执行。如果您需要在1之后执行2,请将其放在EM.synchrony块内。

<强> UPD

x = EM.synchrony do
  # update_ads ads_hash, invalid_ads, ip, params, user_agent, request
  EM::Synchrony::FiberIterator.new([1,2,3]).each do |i|
    # some http requests 
  end
   "1"
end

puts x
puts "2"