Jaka jest różnica między OperationCanceledException
i TaskCanceledException
? Jeśli używam programu .NET 4.5 i używam słów kluczowych o nazwie async
/await
, który powinienem chcieć złapać?Różnica między wyjątkami OperationCanceledException i TaskCanceledException?
65
A
Odpowiedz
75
OperationCanceledException
to po prostu podstawowa klasa dla TaskCanceledException
- więc jeśli złapiesz tego pierwszego, złapiesz go jeszcze.
Niektóre operacje na zbieżnych kolekcjach rzucają tylko OperationCanceledException
, ponieważ nie są zaangażowane żadne konkretne zadania (przynajmniej w zakresie publicznego interfejsu API). Zobacz przykład BlockingCollection.TryTake
.
Chciałbym złapać OperationCanceledException
właśnie w przypadku, gdy zadanie zostanie anulowane z powodu operacji, która sama rzuciła OperationCanceledException
- prawdopodobnie nadal chcesz traktować to jako "tylko anulowanie".
Powiązane problemy
- 1. Różnica między wyjątkami aplikacji a wyjątkami systemowymi
- 2. Jaka jest różnica między wyjątkami, InvalidArgumentException lub UnexpectedValueException?
- 3. Jaka jest różnica między wyjątkami obsługi przez blok catch bezpośrednio nadrzędnej klasie i podklas
- 4. Task.WaitAll i wyjątkami
- 5. Różnica między unwrapObservable i()
- 6. Różnica między "**/* /" i "** /"?
- 7. Różnica między | = i^= css
- 8. Composer.phar różnica między | i ||
- 9. Różnica między "% ~ dp0" i ". \"?
- 10. Różnica między ". +" I ". +?"
- 11. MySQL: Różnica między ",", "i"
- 12. Różnica między (++ i) oraz (i ++)
- 13. Czy istnieje związek między RTTI a wyjątkami?
- 14. TimeoutException, TaskCanceledException C#
- 15. Dlaczego występuje wyjątek TaskCanceledException?
- 16. Różnica kręgosłupa Różnica między CompositeView i CollectionView?
- 17. Różnica między logger.info i logger.debug
- 18. Różnica między fgets i fscanf?
- 19. Różnica między NSLog i DLog
- 20. Różnica między RoutedEventHandler i EventHandler
- 21. Różnica między obrysem i wypełnieniem?
- 22. Różnica między Parameters.Add i Parameters.AddWithValue
- 23. Różnica między putback() i unget()
- 24. Różnica między Delegate.BeginInvoke i Thread.Start
- 25. Różnica między TVar i TMVar
- 26. Różnica między DatagramSocket i DatagramChannel
- 27. Różnica między intent.setClass() i intent.setComponent()
- 28. różnica między -lgcc_s i gcc
- 29. Różnica między string.ToLower i TextInfo.ToLower
- 30. Różnica między javax.sql i java.sql?
Wymyśliłem ForEachAsync głównie z bloga Stephena Touba https://blogs.msdn.microsoft.com/pfxteam/2012/03/05/implementing-a-simple-foreachasync-part-2/. Następnie, jeśli wyrzucę wyjątek wewnątrz 'await enumerable.ForEachAsync (async() => {throw new wyjątek ApplicationException (" Test ");});" w jakiś sposób jest "zmieniony" na wyjątek TaskCanceledException. Jakiś pomysł, jak to może być? Jest to dla mnie problem, ponieważ chcę złapać "prawdziwy" OperationCanceledException za pomocą catch (OperationCanceledException), ale nie chcę, aby ten wyjątek TaskCanceledException (który powinien być naprawdę wyjątkiem ApplicationException). – Terry