我认为您不想使用标志,而是使用mutex之类的东西。
为了做到这一点,一旦你的异步调用完成,该库需要有一个事件来通知你。它看起来像这样:
- 创建你的互斥锁
- 在您的异步完成方法中,添加 'myMutex.Release();"
- 在您的 main 方法中,调用异步方法后,添加“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();
}