4

延期された操作の実行を停止できるかどうか疑問に思っていました。

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 番目の操作を実行したいと考えています。

4

1 に答える 1