दोनों उत्तरों में प्रतीक्षा का उल्लेख नहीं था Task.WhenAll
:
var task1 = DoWorkAsync();
var task2 = DoMoreWorkAsync();
await Task.WhenAll(task1, task2);
के बीच मुख्य अंतर है Task.WaitAll
और Task.WhenAll
यह है कि पूर्व ब्लॉक करेगा ( Wait
एक ही कार्य पर उपयोग करने के समान ), जबकि बाद वाला नहीं होगा और इंतजार किया जा सकता है, जब तक कि सभी कार्य समाप्त नहीं हो जाते।
और अधिक, अपवाद हैंडलिंग अलग है:
Task.WaitAll
:
टास्क इंस्टेंसेस में से कम से कम एक को रद्द कर दिया गया था-और- कम से कम एक टास्क इंस्टेंस के निष्पादन के दौरान एक अपवाद फेंक दिया गया था। यदि किसी कार्य को रद्द कर दिया गया था, तो एग्रीगेटएक्सपेप्शन में उसके आंतरिक अपवाद संग्रह में एक OperationCanceledException शामिल है।
Task.WhenAll
:
यदि आपूर्ति किए गए कार्यों में से कोई भी एक दोषपूर्ण स्थिति में पूरा होता है, तो लौटाया गया कार्य भी एक दोषपूर्ण स्थिति में पूरा होगा, जहां इसके अपवादों में आपूर्ति किए गए कार्यों में से प्रत्येक से अलिखित अपवादों के समूह का एकत्रीकरण होगा।
यदि आपूर्ति किए गए कार्यों में से कोई भी दोषपूर्ण नहीं है, लेकिन उनमें से कम से कम एक को रद्द कर दिया गया था, तो लौटाया गया कार्य रद्द की गई स्थिति में समाप्त हो जाएगा।
यदि कोई भी कार्य दोषपूर्ण नहीं है और कोई भी कार्य रद्द नहीं किया गया है, तो परिणामस्वरूप कार्य RanToCompletion स्थिति में समाप्त हो जाएगा। यदि आपूर्ति की गई सरणी / गणना करने योग्य कोई कार्य नहीं है, तो लौटाया गया कार्य तुरंत कॉल करने पर वापस लौटने से पहले एक RanToCompletion राज्य में संक्रमण करेगा।
await Task.WhenAll(task1, task2);
?