2012-08-26 58 views
8

我正在閱讀TPL上的很多內容,並找出了我們可以使用取消機制的方法。但是我被WaitHandle困住了。WaitHandle的取消

如果我想取消任務,我可以定義CancellationTokenSource並將其與任務一起傳遞,我可以使用ThrowIfCancellationRequested方法取消任務。

我的問題是,當我需要使用WaitHandle的取消目的,爲什麼簡單的取消不能在這種情況下工作?

編輯 MSDN鏈接:http://msdn.microsoft.com/en-us/library/dd997364 ..請參閱使用WaitHandle的聽..

剛學TPL ..

請幫助..

+0

你能對你的觀點‘當使用WaitHandle的’細說。 「簡單取消」是什麼意思? –

+0

更新了問題.. –

回答

15

假設你有ManualResetEventSlim類型的信號想要等待信號設置,取消操作或超時操作。然後你可以使用Wait method如下:

if (signal.Wait(TimeSpan.FromSeconds(10), cancellationToken)) 
{ 
    // signal set 
} 
else 
{ 
    // cancelled or timeout 
} 

但如果你有ManualResetEvent類型的信號,有沒有這樣的等待方法。在這種情況下,你可以使用CancellationTokenWaitHandleWaitHandle.WaitAny method來達到同樣的效果:

if (WaitHandle.WaitAny(new WaitHandle[] { signal, cancellationToken.WaitHandle }, 
         TimeSpan.FromSeconds(10)) == 0) 
{ 
    // signal set 
} 
else 
{ 
    // cancelled or timeout 
}