অপারেশনক্যান্সেলড এক্সসেপশন এবং টাস্ক ক্যান্সেলড এক্সেকশন এর মধ্যে পার্থক্য?


101

মধ্যে পার্থক্য কি OperationCanceledExceptionএবং TaskCanceledException? যদি আমি .NET 4.5 ব্যবহার করছি এবং async/ awaitকীওয়ার্ডগুলি ব্যবহার করছি তবে আমার কোনটি ধরতে হবে?

উত্তর:


117

OperationCanceledExceptionকেবল TaskCanceledExceptionএটির জন্য বেস ক্লাস - সুতরাং যদি আপনি প্রাক্তনটিকে ধরে ফেলেন তবে আপনি পরবর্তীটিকে এখনও ধরতে পারবেন।

সাম্প্রতিক সংগ্রহগুলিতে কিছু ক্রিয়াকলাপ কেবল ছোঁড়ে OperationCanceledException, কারণ এতে কোনও আসল কাজ নেই (অন্ততপক্ষে জনসাধারণের API সম্পর্কিত)। দেখুন BlockingCollection.TryTakeএকটি উদাহরণ জন্য।

OperationCanceledExceptionকোনও অপারেশনের কারণে টাস্ক বাতিল হওয়ার ক্ষেত্রে আমি ন্যায়বিচারটি ধরব যা নিজেই ফেলেছিল OperationCanceledException- আপনি সম্ভবত এখনও এটিকে "কেবল বাতিল" হিসাবে গণ্য করতে চান।


1
আমি বেশিরভাগ স্টিফেন টবের ব্লগ ব্লগস.এমএসএনএন.মাইক্রোসফট.কম / পিএফএক্সটিয়াম / ২০১২ / ২০১৩ / ২০১৫ থেকে একটি ফোরএচএন্সিঙ্ক নিয়ে এসেছি । তারপরে যদি আমি await enumerable.ForEachAsync( async () => { throw new ApplicationException( "Test" ); } );কোনওভাবে কোনও ব্যতিক্রম ছুঁড়ে ফেলি তবে এটি একটি 'টাস্ক ক্যান্সেলড এক্সসেপশন'-এ পরিবর্তিত হয়। কোন ধারণা কিভাবে হতে পারে? এটি আমার জন্য সমস্যা কারণ আমি 'সত্য' অপারেশন ক্যান্সেলড এক্সসেপশন ধরার জন্য চাই (অপারেশনক্যান্সেলড এক্সেকশন) তবে আমি এই টাস্ক ক্যান্সেলড এক্সেকশন (যা সত্যই অ্যাপ্লিকেশনএক্সসেপশন হওয়া উচিত) ধরা চাই না।
টেরি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.