EM.defer

EM.deferを使うことで、ブロッキングI/O処理(ファイル読み込み、ネットワーク通信など)をメインスレッドの外で実行させ、結果をコールバック関数で受け取ることができます。

以下に例を示します。

EM.runの中で、deferにより別スレッドで実行されるoperation、およびdefer実行が完了した時にメインスレッドで呼ばれるcallbackというふたつのラムダを定義しています。これを実行すると、

operationラムダの内容のみ別スレッドで実行されているのがわかります。

EM::Deferrable

一方、EM::Deferrableはオブジェクトの状態を監視して、処理が成功したか失敗したかによってインスタンスに予め登録したコールバックを呼び出す機能を持ちます。使い方は以下の例を見てください。

まず状態を監視したいクラスにEM::Deferrableをincludeすることで、いくつかのメソッドが利用可能になります。成功時の処理をcallback、失敗時の処理をerrbackというメソッドに渡したブロックの中で定義しておき、あとは処理結果に応じて成功(succeed)、失敗(fail)のいずれかを呼び出した時点であらかじめ登録しておいた処理が実行されます。

これによって、非同期処理の結果に応じて分岐する処理を可読性高く書くことが出来ます。

以上でEventMachineの簡単な紹介は終わりです。



※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。