मैं एक LINQ क्वेरी लिखने की कोशिश कर रहा हूं जो .NET ढांचे में प्रदान की गई CancellationToken
तंत्र का उपयोग करके रद्दीकरण का समर्थन करेगा। हालांकि, यह स्पष्ट नहीं है कि रद्दीकरण और LINQ को गठबंधन करने का उचित तरीका क्या होगा।रद्द करने के साथ LINQ का उपयोग करने का उचित तरीका
, यह लिखने के लिए संभव है:
var resultSequence = sourceSequence.AsParallel()
.WithCancellation(cancellationToken)
.Select(myExpensiveProjectionFunction)
.ToList();
दुर्भाग्य से, WithCancellation()
केवल एक ParallelEnumerable
पर लागू होता है - तो यह एक सादे पुराने LINQ क्वेरी के साथ नहीं किया जा सकता। यह एक अनुक्रमिक एक में एक समानांतर क्वेरी चालू करने के लिए WithDegreeOfParallelism(1)
उपयोग करने के लिए, संभव है, ज़ाहिर है, - लेकिन यह स्पष्ट रूप से एक हैक है:
var resultSequence = sourceSequence.AsParallel()
.WithDegreeOfParallelism(1)
.WithCancellation(cancellationToken)
.Select(myExpensiveProjectionFunction)
.ToList();
मैं भी, जैसा कि मैंने जरूरत इस कार्रवाई के लिए एक अलग Task
बनाने से बचना चाहते हैं इसे कई स्थानों पर करने के लिए, और मुझे कुछ मामलों में यह कोड नियंत्रित करने में सक्षम होना चाहिए।
तो, WithCancellation()
के अपने कार्यान्वयन को लिखने से कम - क्या कोई विकल्प है जो एक ही चीज़ प्राप्त करेगा?
मैं जानता हूँ कि इस सवाल का एक लंबे समय पहले से था, लेकिन क्या सिर्फ उपयोग करने के साथ गलत था 'AsParallel()। WithCancellation (cancellationToken)' और बस PLINQ हो दे? –