2012-08-26 4 views
8

Dużo czytam na TPL i dowiedziałem się, w jaki sposób możemy skorzystać z mechanizmu anulowania. Ale utknąłem z WaitHandle.Anulowanie z WaitHandle

Jeśli chcę anulować zadanie, mogę zdefiniować źródło AnulujToken i przekazać go wraz z zadaniem i mogę użyć metody ThrowIfCancellationRequested, aby anulować zadanie.

Moje pytanie brzmi, kiedy muszę użyć funkcji WaitHandle w celu anulowania i dlaczego proste anulowanie nie działa w takiej sytuacji?

EDIT MSDN Link: http://msdn.microsoft.com/en-us/library/dd997364 .. zobacz słuchania za pomocą WaitHandle ..

ucze TPL ..

Proszę o pomoc ..

+0

można opracować na punkcie«Kiedy używać WaitHandle». A co masz na myśli przez "proste anulowanie"? –

+0

Zaktualizowano pytanie .. –

Odpowiedz

15

Załóżmy, że masz sygnał typu ManualResetEventSlim i chcesz poczekać na ustawienie sygnału, anulować operację lub przerwać operację. Następnie można użyć Wait method następująco:

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

Ale jeśli masz sygnał typu ManualResetEvent, nie istnieje taka metoda czekać. W tym przypadku można użyć CancellationToken „s WaitHandle i WaitHandle.WaitAny method aby osiągnąć ten sam efekt:

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