लगभग इस विषय के बारे में हर एसओ का जवाब, कहा गया है कि:async - स्पष्टीकरण?
इसके अलावा:
I recommend that you not think of this as "using async within LINQ"
लेकिन स्टीफन किताब में वहाँ के लिए एक नमूना है :
समस्या: आप का इंतजार करने के लिए कार्यों की एक संग्रह है, और आप प्रत्येक कार्य पर कुछ प्रसंस्करण करने के लिए यह पूरा करने के बाद चाहते हैं। हालांकि, आप प्रत्येक के लिए प्रसंस्करण के रूप में जल्द ही प्रसंस्करण करना चाहते हैं, अन्य कार्यों में से किसी के लिए प्रतीक्षा कर रहा है।
सिफारिश समाधान में से एक था:
static async Task<int> DelayAndReturnAsync(int val)
{
await Task.Delay(TimeSpan.FromSeconds(val));
return val;
}
// This method now prints "1", "2", and "3".
static async Task ProcessTasksAsync()
{
// Create a sequence of tasks.
Task<int> taskA = DelayAndReturnAsync(2);
Task<int> taskB = DelayAndReturnAsync(3);
Task<int> taskC = DelayAndReturnAsync(1);
var tasks = new[] { taskA, taskB, taskC };
var processingTasks = tasks.Select(async t =>
{
var result = await t;
Trace.WriteLine(result);
}).ToArray();
// Await all processing to complete
await Task.WhenAll(processingTasks);
}
प्रश्न # 1:
मुझे समझ नहीं आता क्यों अब async
एक LINQ बयान के अंदर - काम करता है। क्या हमने अभी नहीं कहा " LINQ के भीतर async
का उपयोग करने के बारे में सोचें"?
प्रश्न # 2: - क्या वास्तव में ऐसा है
जब नियंत्रण यहाँ await t
तक पहुँच जाता है? क्या नियंत्रण ProcessTasksAsync
विधि छोड़ देता है? या क्या यह अनाम विधि छोड़ देता है और पुनरावृत्ति जारी रखता है?
कि "डॉन इसके बारे में नहीं सोचते ... "कथन अनिवार्य नहीं था। आपके द्वारा उद्धृत ग्रंथों में से कोई भी नहीं कहता है कि एसिंक लिंक के साथ काम नहीं करेगा - बस टोपी यह एकदम सही मैच नहीं है। –
स्टीफन टब द्वारा एक अच्छा पठन, यदि आप अभी तक इसमें नहीं आए हैं: [कार्य, मोनाड्स, और LINQ] (http://blogs.msdn.com/b/pfxteam/archive/2013/04/03/tasks -monads और linq.aspx)। – Noseratio