Вместо флага, я думаю, вы захотите использовать что-то вроде mutex .
Для этого в этой библиотеке должно быть событие, уведомляющее вас о завершении асинхронного вызова. Это будет выглядеть так:
- Создайте свой мьютекс
- В вашем методе асинхронного завершения добавьте 'myMutex.Release (); "
- В вашем основном методе после вызова асинхронного метода добавьте "myMutex.WaitOne ();". Это заблокирует поток, пока ваш асинхронный вызов не будет завершен.
Прошло много времени с тех пор, как я использовал этот материал, но я уверен, что так оно и должно быть.
edit : Упс, думаю, я думал о семафоре , а не мьютексе:
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();
}
edit # 2 : предложение Пер Торарина; похоже, этот класс был разработан для обработки подобных ситуаций в .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();
}