IEnumerable<>
लौटने की विधि में, मैं संसाधन पर खोल रहा हूं और लूपिंग कर रहा हूं (उदा। डेटाबेस पंक्ति पाठक)। एक बार लूप समाप्त हो जाने के बाद, संसाधन फिर से बंद हो जाता है।मैं एक आईनेमरेबल को कैसे रद्द कर सकता हूं?
हालांकि, ऐसा हो सकता है कि कॉलर गणना समाप्त न करने का निर्णय लेता है। यह संसाधन खुला रहता है।
उदाहरण:
IEnumerable<Foo> Bar()
{
using (var r = OpenResource()) {
while (r.Read()) {
yield return r;
}
}
}
// OK - this closes the resource again
foreach (var foo in Bar()) {
Console.WriteLine (foo);
}
// Not OK - resource stays open!
Console.WriteLine (Bar().First());
मैं इस का समाधान होगा? क्या मैं आसानी से एक गणना रद्द कर सकता हूं, यानी इसे बाकी लूप पर छोड़ने के लिए कहें, या इसे निपटाना (Dispose
में सफाई कोड डालना)?
मुझे Func<Result, bool>
लौटने पर विचार किया गया ताकि उपयोगकर्ता इसे false
वापस कर सकें यदि वह पुनरावृत्ति के साथ किया गया हो। इसी प्रकार, कुछ प्रकार के रद्द टोकन का भी उपयोग किया जा सकता है। लेकिन दोनों दृष्टिकोण मेरे लिए बोझिल लगते हैं।
मैंने खोजा और कोई समान प्रश्न नहीं मिला, हालांकि मुझे यकीन है कि एक होना चाहिए - यह एक बहुत ही बुनियादी सवाल आईएमओ है। – mafu
'ब्रेक; 'इसे रद्द करना चाहिए और जेनरेट कोड को गणनाकर्ता का निपटान करना चाहिए। अगर स्रोत चीजों को सही तरीके से नहीं करता है, तो उसे निश्चित करने की आवश्यकता है। –
@ डैनियलए। मैं इसे कॉलर स्कोप पर रद्द करना चाहता हूं, न कि गणना विधि के अंदर – mafu