4

処理が終了したときにイベントStartProcessing()を発生させるメソッドを持つ非同期クラスがあります。時間がほとんどかかりません。int ResultReady()StartProcessing()

このクラスを同期的に呼び出したい。私の擬似コードは次のようになります。

  1. StartProcessing()を呼び出す

  2. 結果の準備ができるまで待つ/スリープする

  3. 結果を返す

これに最適なデザインパターンは何ですか?コード例を教えていただけますか?

4

1 に答える 1

6

これを行う簡単な方法の 1 つはManualResetEvent、イベント ハンドラーと待機中のコードの両方がアクセスできる を使用することです。Setイベント ハンドラーからの呼び出し、およびWaitOne(またはタイムアウトを伴うオーバーロード) 待機中のスレッドからの呼び出し。これは STA スレッドでは実行できないため、WinForms スレッド (常に STA である必要があります) 内では実行できませんが、UI スレッド内で待機するべきではないことに注意してください。

このようなもの:

var async = new AsyncClass();
var manualEvent = new ManualResetEvent();
async.ResultReady += args => manualEvent.Set();
async.StartProcessing();
manualEvent.WaitOne();
于 2011-02-14T07:11:46.563 に答える