WaitHandle WaitOne(int timeout)
是什么时候返回的?超时时间结束后是否返回?我看到一些代码在线,这表明在执行退出前执行一些清理的逻辑时轮询WaitOne()
。这意味着WaitOne()在超时过后不会返回;而是在它被调用后立即返回信号。WaitHandle WaitOne退货
public void SomeMethod()
{
while (!yourEvent.WaitOne(POLLING_INTERVAL))
{
if (IsShutdownRequested())
{
// Add code to end gracefully here.
}
}
// Your event was signaled so now we can proceed.
}
我想在这里实现的是使用CancellationToken
而它阻塞调用线程的信号的WaitHandle
的方式。
[您是否阅读过手册?](https://msdn.microsoft.com/en-us/library/cc189907(v = vs.110).aspx) – MickyD
希望它在事件在合理的时间。如果没有,那么你有两个问题。不知道该如何放入if()语句非常正常。我们不知道什么“优雅”可能意味着什么时候发生了一些非常不正常的事情。抛出一个异常通常会像它得到的那样优雅。如果你不知道该怎么做,就不要使用超时,至少你可以调试它。 –
好的谢谢。我知道它会在发出信号后立即返回。那么在这种情况下,它不会在超时时间内发出信号,它将返回false并且不会返回任何异常?在这种情况下,轮询WaitOne没有意义。我希望在WaitHandle超时或正在等待之前等待时阻止调用线程。有什么建议么? – TheWolf