延期された操作の実行を停止できるかどうか疑問に思っていました。
require 'rubygems'
require 'em-websocket'
EM.run do
EM::WebSocket.start(:host => '0.0.0.0', :port => 8080) do |ws|
ws.onmessage do |msg|
op = proc do
sleep 5 # Thread safe IO here that is safely killed
true
end
callback = proc do |result|
puts "Done!"
end
EM.defer(op, callback)
end
end
end
これは Web ソケット サーバーの例です。IO を実行したいというメッセージを受け取ったときに、同じものを読み取る必要がある別のメッセージが後で届くことがあります。次のものが常に前のものよりも優先されます。したがって、最初の操作をキャンセルして、2 番目の操作を実行したいと考えています。