有没有办法取消“AsyncWaitHandle.WaitOne()”?

时间:2010-07-18 06:46:58

标签: multithreading

提前感谢您的帮助。

我想在我的代码中的某个时刻取消AsyncWaitHandle.WaitOne()(意思是我不想再阻止),但我找不到这样做的方法。也许,这是我的程序的逻辑问题,但是一旦给出退出信号,我就想不出任何其他方式来摆脱循环。以下是有问题的代码:

s.Bind(endPoint);  
s.Listen(15);
while (true) {
    thrd = s.BeginAccept(new AsyncCallback(Accept_Callback), s);
    thrd.AsyncWaitHandle.WaitOne(); // it still blocks here when next statement becomde "true"
    if (_syncEvents.ExitThreadEvent.WaitOne(0, false))
    {
       //I want to break out of the loop at this point, it breaks out only when next call coming
        thrd.AsyncWaitHandle.Close();
        s.Close();
        break;
    } 
}

请帮助,谢谢!

陈亚伦

1 个答案:

答案 0 :(得分:3)

您可以使用手动重置事件:

    ManualResetEvent evt = new ManualResetEvent(false);

    WaitHandle[] handles = new WaitHandle[] { evt, thrd.AsyncWaitHandle };

    WaitHandle.WaitAny(handles);

然后,从另一个线程,调用:

    evt.Set();

释放套接字。