मैं एक मौजूदा कार्यक्रम संशोधित करने की आवश्यकता है और यह कोड निम्नलिखित शामिल हैं:Async LINQ में इंतजार चयन
var inputs = events.Select(async ev => await ProcessEventAsync(ev))
.Select(t => t.Result)
.Where(i => i != null)
.ToList();
लेकिन यह मेरे लिए बहुत अजीब, चयन में async
और await
के सभी प्रयोग के पहले लगता है। स्टीफन क्लेरी द्वारा this answer के अनुसार मुझे उनको छोड़ने में सक्षम होना चाहिए।
फिर दूसरा Select
जो परिणाम का चयन करता है। इसका मतलब यह नहीं है कि कार्य बिल्कुल असीमित नहीं है और सिंक्रनाइज़ किया जाता है (कुछ भी करने के लिए इतना प्रयास नहीं), या कार्य को असीमित रूप से निष्पादित किया जाएगा और जब यह किया जाता है तो शेष क्वेरी निष्पादित की जाती है?
मैं निम्नलिखित की तरह ऊपर कोड लिखने चाहिए another answer by Stephen Cleary के अनुसार:
var tasks = await Task.WhenAll(events.Select(ev => ProcessEventAsync(ev)));
var inputs = tasks.Where(result => result != null).ToList();
और यह पूरी तरह से इस तरह एक ही है?
var inputs = (await Task.WhenAll(events.Select(ev => ProcessEventAsync(ev))))
.Where(result => result != null).ToList();
जबकि मैं इस परियोजना पर काम कर रहा हूँ मैं पहली बार कोड नमूना बदलना चाहते हैं, लेकिन मैं (जाहिरा तौर पर काम कर रहे) async कोड बदलने पर भी उत्सुक नहीं हूँ। हो सकता है कि मैं बस कुछ भी नहीं कर रहा हूं और सभी 3 कोड नमूने बिल्कुल वही काम करते हैं?
ProcessEventsAsync इस तरह दिखता है:
async Task<InputResult> ProcessEventAsync(InputEvent ev) {...}
ProceesEventAsync का रिटर्न प्रकार क्या है? – tede24
@ tede24 यह 'कार्य' है 'इनपुट रेसल्ट' एक कस्टम क्लास है। –
आपकी राय में आपके संस्करण पढ़ने के लिए बहुत आसान हैं। हालांकि, आप अपने 'कहां' से पहले कार्यों से परिणामों का चयन 'भूल गए हैं। – Max