जवाबों:
OperationCanceledExceptionके लिए बस आधार वर्ग है TaskCanceledException- इसलिए यदि आप पूर्व को पकड़ते हैं, तो आप बाद में भी पकड़ लेंगे।
समवर्ती संग्रहों पर कुछ संक्रियाएँ सिर्फ इसलिए फेंकती हैं OperationCanceledException, क्योंकि इसमें कोई वास्तविक कार्य शामिल नहीं हैं (कम से कम जहाँ तक सार्वजनिक एपीआई का संबंध है)। BlockingCollection.TryTakeएक उदाहरण के लिए देखें ।
मैं OperationCanceledExceptionसिर्फ एक मामले में कार्य को रद्द कर दूंगा जो एक ऑपरेशन के कारण रद्द कर दिया गया था जो कि सिर्फ फेंक दिया गया था OperationCanceledException- आप शायद अभी भी "बस रद्द" के रूप में व्यवहार करना चाहते हैं।
await enumerable.ForEachAsync( async () => { throw new ApplicationException( "Test" ); } );किसी तरह से एक अपवाद को फेंक देता हूं तो इसे टास्ककैन्लेड अपवाद के रूप में बदल दिया जाता है। किसी भी विचार कैसे हो सकता है? यह मेरे लिए समस्या है क्योंकि मैं एक 'true' OperationCanceledException को कैच (OperationCanceledException) के माध्यम से पकड़ना चाहता हूं, लेकिन मैं नहीं चाहता कि यह TaskCanceledException (जो वास्तव में ApplicationException होनी चाहिए) पकड़ा जाए।