Arasındaki fark nedir OperationCanceledException
ve TaskCanceledException
? .NET 4.5 kullanıyorsam ve async
/ await
anahtar kelimelerini kullanıyorsam , hangisini yakalamaya çalışmalıyım?
Yanıtlar:
OperationCanceledException
basitç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 OperationCanceledException
herhangi bir fiili görev olmadığı için (en azından genel API söz konusu olduğunda) işe yarar. BlockingCollection.TryTake
Bir örneğe bakın .
OperationCanceledException
Kendisi yeni atılan bir işlem nedeniyle görev iptal edilirse, tam olarak yakalarım OperationCanceledException
- muhtemelen buna "sadece iptal" olarak muamele etmek istersiniz.
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.