2011-10-20 16 views
1

私は、長時間実行されているタスクを実行するために.NET 4.0のタスク並列ライブラリを使用しています。長時間実行されるタスクにはさまざまな段階があり、各段階で完了すると、テキストファイルまたはdbに情報を記録します。私は、すべてのステージでログメソッドを呼び出す代わりに、パブリッシャー/サブスクライバーパターンを使用することを考えました。つまり、すべてのステージで、長時間実行されていたタスクから起動しなければならないイベントがあり、他のクラスはイベントを聞いて、オブジェクト。タスク並列ライブラリを使用したイベント

マルチスレッド環境でイベントを使用することについてはあまりよく分かりません。 TPLでイベントを使用するのは良い考えですか?どのようにすればいいですか?いくつかの提案を探しています。

答えて

0

あなたの説明はまさに "Event based Asynchronous"のパターンです。これはBCLのさまざまなクラスによっても実装されています。例:WebClientクラスにはDownloadStringAsyncメソッドがあり、TPLなどを使用して別のスレッドでダウンロードを開始し、このクラスはDownloadStringCompletedとDownloadProgressChangedを公開します(これは長期実行タスクで完了するステップに正確に対応します)。

したがって、基本的にはこのパターンを実装するのに問題ありません。タスクが実行されているスレッドでこれらのイベントが発生することを覚えておいてください。したがって、これらのイベントのハンドラがこの事実を認識していることを確認する必要があります。

+0

ご返信ありがとうございます。イベントハンドラは、イベントが発生したスレッドで実行されます。rgt? – VJAI

+0

@マーク:はい、正しい。イベントはデリゲートのリストと似ていますので、イベントを発生させると、基本的にリスト内のデリゲートのそれぞれが1つずつ実行されます。 – Ankur

関連する問題