処理が終了したときにイベントStartProcessing()
を発生させるメソッドを持つ非同期クラスがあります。時間がほとんどかかりません。int ResultReady()
StartProcessing()
このクラスを同期的に呼び出したい。私の擬似コードは次のようになります。
StartProcessing()を呼び出す
結果の準備ができるまで待つ/スリープする
結果を返す
これに最適なデザインパターンは何ですか?コード例を教えていただけますか?
処理が終了したときにイベントStartProcessing()
を発生させるメソッドを持つ非同期クラスがあります。時間がほとんどかかりません。int ResultReady()
StartProcessing()
このクラスを同期的に呼び出したい。私の擬似コードは次のようになります。
StartProcessing()を呼び出す
結果の準備ができるまで待つ/スリープする
結果を返す
これに最適なデザインパターンは何ですか?コード例を教えていただけますか?
これを行う簡単な方法の 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();