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