4

瘦服务器基于 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"

感谢提前!

4

1 回答 1

2

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

更新

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"
于 2012-09-25T13:32:05.057 回答