OperationCanceledException ve TaskCanceledException arasındaki fark?


101

Arasındaki fark nedir OperationCanceledExceptionve TaskCanceledException? .NET 4.5 kullanıyorsam ve async/ awaitanahtar kelimelerini kullanıyorsam , hangisini yakalamaya çalışmalıyım?

Yanıtlar:


117

OperationCanceledExceptionbasitçe temel sınıftır TaskCanceledException- yani ilkini yakalarsanız, ikincisini yine de yakalarsınız.

Eşzamanlı koleksiyonlardaki bazı işlemler, dahil olan OperationCanceledExceptionherhangi bir fiili görev olmadığı için (en azından genel API söz konusu olduğunda) işe yarar. BlockingCollection.TryTakeBir örneğe bakın .

OperationCanceledExceptionKendisi yeni atılan bir işlem nedeniyle görev iptal edilirse, tam olarak yakalarım OperationCanceledException- muhtemelen buna "sadece iptal" olarak muamele etmek istersiniz.


1
Çoğunlukla Stephen Toub'un blog blogs.msdn.microsoft.com/pfxteam/2012/03/05/… adresinden bir ForEachAsync buldum . Sonra bir await enumerable.ForEachAsync( async () => { throw new ApplicationException( "Test" ); } );şekilde bir istisna atarsam , TaskCanceledException olarak 'değiştirilir'. Bunun nasıl olabileceği hakkında bir fikriniz var mı? Catch (OperationCanceledException) aracılığıyla 'gerçek' OperationCanceledException'ı yakalamak istediğim için bu benim için sorun, ancak bu TaskCanceledException'ın (gerçekten ApplicationException olması gereken) yakalanmasını istemiyorum.
Terry
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.