Anulowanie Parallel.Foreach

Anulowanie Parallel.Foreach
FO
  • Rejestracja:ponad 9 lat
  • Ostatnio:prawie 3 lata
  • Postów:38
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

maszrum
  • Rejestracja:około 5 lat
  • Ostatnio:około rok
  • Lokalizacja:Kraków
  • Postów:219
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

edytowany 1x, ostatnio: maszrum

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.