हमारे आवेदन में हम async/प्रतीक्षा और कार्य के साथ बहुत काम करते हैं। इसलिए यह कार्य का उपयोग करता है। बहुत सारे, कभी-कभी CancellationToken
में निर्मित का उपयोग करके रद्दीकरण समर्थन के साथ।कार्य रद्द करने का प्रयास सफलता नियंत्रण प्रवाह पर अपवाद से कैसे बचें?
public Task DoSomethingAsync(CancellationToken cancellationToken)
{
return Task.Run(() =>
{
while (true)
{
if (cancellationToken.IsCancellationRequested) break;
//do some work
}
}, cancellationToken);
}
मैं निष्पादन CancellationToken निष्पादन का उपयोग करके अगले पाश की शुरुआत में रोक है रद्द अब करते हैं, या यदि कार्य बिल्कुल शुरू नहीं किया यह एक अपवाद (Task.Run अंदर TaskCanceledException) फेंकता है। सवाल यह है कि टास्क.रुन एक पूर्ण कार्य को वापस करने के बजाय सफल रद्दीकरण को नियंत्रित करने के लिए अपवाद का उपयोग क्यों करता है। क्या कोई विशिष्ट कारण है कि एमएस "निष्पादन प्रवाह को नियंत्रित करने के लिए अपवादों का उपयोग न करें" नियम से चिपके नहीं है?
और मैं पूरी तरह से बेकार प्रयास पकड़ (टास्क कैंक्ड एक्सेप्शन) ब्लॉक में रद्दीकरण (जो बहुत कुछ है) का समर्थन करने वाली हर विधि को बॉक्सिंग से कैसे बच सकता हूं?
"-
हालांकि, अगर आप' की अपेक्षा क्या होगी? –
TaskCanceledException
व्यवहार पर अधिक नियंत्रण है चाहते हैं और अभी भी तर्क एक जगह पर अलग-थलग है आप जो रद्द संभालतीTask
विस्तार करने के लिए एक विस्तार विधि, कुछ इस तरह लागू कर सकते हैं रद्दीकरण! = सफल समापन "। रद्द होने पर वापस आने के लिए 'कार्य** कार्य रद्द करने के साथ रद्द किया गया एक कार्य उदाहरण TokenSource.Cancel(); ** ** टास्कस्टैटस। RanToCompletion State ** होगा, ** टास्कस्टैटस के लिए नहीं। रद्द ** राज्य। –
आप वापसी मूल्य के साथ कार्य के लिए सही हैं अपवाद की आवश्यकता है। इसके बारे में सोचा नहीं था। – Console