フラグの代わりに、ミューテックスのようなものを使用したいと思います。
これを行うには、非同期呼び出しが完了すると、そのライブラリに通知するイベントが必要です。次のようになります。
- ミューテックスを作成する
- 非同期の完全なメソッドで、「myMutex.Release();」を追加します。
- メインメソッドで、asyncメソッドを呼び出した後、「myMutex.WaitOne();」を追加します。これにより、非同期呼び出しが完了するまでスレッドがブロックされます。
私がこのようなものを使用してからしばらく経ちましたが、それがどのように機能するかはかなり確信しています。
編集:おっと、私はミューテックスではなく、セマフォを考えていたと思います:
private static Semaphore mySemaphore = new Semaphore(0, 1);
static void Main(string[] args)
{
Console.WriteLine("Waiting on async call");
(new Thread(ASyncCallCompleted)).Start();
mySemaphore.WaitOne();
Console.WriteLine("Waiting Completed");
}
private static void ASyncCallCompleted()
{
Thread.Sleep(5000);
mySemaphore.Release();
}
編集#2:Thorarinの提案による。このクラスは、.Netで次のような状況を処理するように設計されているようです。
private static AutoResetEvent mySync = new AutoResetEvent(false);
static void Main(string[] args)
{
Console.WriteLine("Waiting on async call");
(new Thread(ASyncCallCompleted)).Start();
mySync.WaitOne();
Console.WriteLine("Waiting Completed");
Console.Read();
}
private static void ASyncCallCompleted()
{
Thread.Sleep(5000);
mySync.Set();
}