4

Thin サーバーは 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 に答える