のは、私のような公開されたインターフェースを持っているとしましょう:C#糸通し機構
interface IMyService
{
MyResult MyOperation();
}
この操作は同期であり、値を返します。
私の実装インタフェースは、次の操作を行うことがあります。
- はこれがためですイベント#のイベント#用
- 待ち1
- 待ち2
を非同期メソッドを呼び出します私が協力しているサードパーティのCOMオブジェクト。
このコードでは、それは非常にランダムである、順序のいずれかで発生する可能性があり、次の
public MyResult MyOperation()
{
_myCOMObject.AsyncOperation();
//Here I need to wait for both events to fire before returning
}
private void MyEvent1()
{
//My Event 1 is fired in this handler
}
private void MyEvent2()
{
//My Event 2 is fired in this handler
}
私の二つの事象に似ています。
私はこれを同期するために使用できる適切なスレッド機構は何ですか? 2番目のイベントの待機を開始する前にManualResetEventを使用していましたが、両方のイベントで簡単に使用する方法は見当たりませんでした。これらの2つのイベントはMyOperation()の戻り値を作成できる変数を設定します。
いい実装のアイデアですか?私は第三者オブジェクトが実装される方法を制御できません。
これは意味があります。私の混乱は、複数のManualResetEventsでReset()を呼び出す場所に嘘をつきました。また、2つのスレッドが同時に関数を呼び出せないようにMyOperation()に呼び出し全体をロックする必要があります。 – jonathanpeppers
これは完璧な解決策ですが、2つのWaitOneブロッキングコールの代わりにWaitAll(下図参照)を使用します.WaitAllはブロッキングについての詳細なコンテキストを提供し、潜在的にはより良いスケジュールを立てる可能性があります。 – meandmycode
フィードバックいただきありがとうございます。私は私の答えを更新しました。 –