Anulowanie Parallel.Foreach

0

Cześć :) ostatnio bawiłem się trochę async/await i Parallel.ForEach i o ile w przypadku async/await anulowanie zadania jest zrozumiałe - wywołanie metody Cancel dla CancelationTokenSource.Token i następnie wyrzucenie wyjątku przez ThrowIfCancellationRequested, to przy Parallel.ForEach mam pewien problem. Właściwie wszystko działa, a przynajmniej zdaje się działać poprawnie, jednak wygląda na to że samo wywołanie funkcji Cancel wystarcza tzn. zakomentowałem metodę ThrowIfCancellationRequested, a nadal ląduję w catch'u, pomimo że wyjątek nie został rzucony, a przynajmniej nie przeze mnie.
Stąd moje pytanie, czy Parallel.ForEach sam sprawdza czy operacja została przerwana? I jeśli tak to czy poprawnym jest samodzielne wywoływanie metody ThrowIfCancellationRequested wewnątrz Parallel.ForEach np. przed zasobożernymi operacjami, aby uniknąć niepotrzebnego ich wykonywania? Czy po prostu coś skopałem i dzieją się dziwne rzeczy? :D

1

Jeśli w ParallelOptions ustawisz CancellationToken i potem ten token anulujesz to według dokumentacji dostaniesz OperationCanceledException automatycznie. Nie musisz używać metody ThrowIfCancellationRequested.

Dokumentacja Parallel.ForEach

1 użytkowników online, w tym zalogowanych: 0, gości: 1