मेरे पास कुछ async REST सेवाएँ हैं जो एक दूसरे पर निर्भर नहीं हैं। यह है कि Service1 की प्रतिक्रिया का "इंतजार" करते समय, मैं Service2, Service3 और इतने पर कॉल कर सकता हूं।
उदाहरण के लिए, नीचे दिया गया कोड देखें:
var service1Response = await HttpService1Async();
var service2Response = await HttpService2Async();
// Use service1Response and service2Response
अब, service2Responseनिर्भर नहीं है service1Responseऔर उन्हें स्वतंत्र रूप से लाया जा सकता है। इसलिए, मुझे दूसरी सेवा को कॉल करने के लिए पहली सेवा की प्रतिक्रिया का इंतजार करने की कोई आवश्यकता नहीं है।
मुझे नहीं लगता कि मैं Parallel.ForEachयहां उपयोग कर सकता हूं क्योंकि यह सीपीयू बाउंड ऑपरेशन नहीं है।
इन दो ऑपरेशनों को समानांतर में कॉल करने के लिए, क्या मैं उपयोग को कॉल कर सकता हूं Task.WhenAll? एक मुद्दा जो मैं देख रहा हूं Task.WhenAllवह यह है कि यह परिणाम नहीं देता है। परिणाम प्राप्त करने के लिए मैं कॉल करने के task.Resultबाद कॉल कर सकता हूं Task.WhenAll, क्योंकि सभी कार्य पहले से ही पूरे हो चुके हैं और सभी को हमें प्रतिक्रिया प्राप्त करने की आवश्यकता है?
नमूना कोड:
var task1 = HttpService1Async();
var task2 = HttpService2Async();
await Task.WhenAll(task1, task2)
var result1 = task1.Result;
var result2 = task2.Result;
// Use result1 and result2
क्या यह कोड प्रदर्शन के मामले में पहले से बेहतर है? कोई अन्य दृष्टिकोण जिसका मैं उपयोग कर सकता हूं?
Parallel.ForEachनए धागे स्पॉन async awaitकरेंगे जबकि एक ही धागे पर सब कुछ करेंगे।
awaitतैयार होने से पहले प्रतिक्रिया ( ) का उपयोग करने का प्रयास करेगा ।
WhenAllइससे पहले कि मैं ऐसा Resultविचार है कि यह सभी कार्य से पहले .Result कहा जाता है पूरा करता है। चूंकि, Task.Result कॉलिंग थ्रेड को ब्लॉक करता है, इसलिए मैं मानता हूं कि यदि मैं कार्य पूरा होने के बाद इसे कॉल करता हूं तो यह तुरंत परिणाम देगा। मैं समझ को मान्य करना चाहता हूं।
I do not think I can use Parallel.ForEach here since it is not CPU bound operation- मैं वहां तर्क नहीं देखता। कॉनक्यूरेन्सी कंसीडर है।