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:
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.
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.