आप एक साथ कई HttpClient.GetAsync()
अनुरोध कैसे शुरू करते हैं, और जैसे ही उनके संबंधित प्रतिक्रियाएं वापस आती हैं उन्हें संभालें? सबसे पहले मैंने कोशिश की है:कई एसिंक/प्रतीक्षा कार्यों को एक साथ शुरू करना और उन्हें अलग से संभालना
var response1 = await client.GetAsync("http://example.com/");
var response2 = await client.GetAsync("http://stackoverflow.com/");
HandleExample(response1);
HandleStackoverflow(response2);
लेकिन निश्चित रूप से यह अभी भी अनुक्रमिक है। तो फिर मैं उन दोनों को एक ही बार में शुरू करने की कोशिश की:
var task1 = client.GetAsync("http://example.com/");
var task2 = client.GetAsync("http://stackoverflow.com/");
HandleExample(await task1);
HandleStackoverflow(await task2);
अब कार्य एक ही समय है, जो अच्छा है पर शुरू कर दिया है, लेकिन निश्चित रूप से कोड को अभी भी एक के बाद एक के लिए इंतजार करना पड़ता है।
मैं क्या चाहता हूँ के रूप में यह में आता है, और "stackoverflow.com" जैसे ही यह में आता प्रतिक्रिया के रूप में जल्द ही "example.com" प्रतिक्रिया को संभालने के लिए सक्षम होने के लिए है।
मैं डाल सकता है एक सरणी में दो कार्य एक लूप में Task.WaitAny()
का उपयोग करते हैं, यह जांचते हुए कि कौन सा पूरा हो गया है और उचित हैंडलर को कॉल करें, लेकिन फिर ... नियमित रूप से पुराने कॉलबैक से बेहतर कैसे है? या यह वास्तव में async/प्रतीक्षा के लिए एक इच्छित उपयोग केस नहीं है? यदि नहीं, तो मैं कॉलबैक के साथ HttpClient.GetAsync()
का उपयोग कैसे करूं?
स्पष्ट करने के लिए - व्यवहार मैं के बाद कर रहा हूँ इस छद्म कोड की तरह कुछ है: WhenAll
client.GetAsyncWithCallback("http://example.com/", HandleExample);
client.GetAsyncWithCallback("http://stackoverflow.com/", HandleStackoverflow);
FWIW, कार्य के बाद से। जब सभी ओवरले लोड में पैरामीटर का उपयोग करते हैं, तो आप केवल आखिरी पंक्ति को जब सभी (task1, task2) में बदल सकते हैं और कंपाइलर को आपके लिए सरणी बना सकते हैं :) http://msdn.microsoft .com/en-us/पुस्तकालय/hh194874।एएसपीएक्स –
यह उत्तर सिर्फ दोनों को पूरा करने के लिए इंतजार कर रहा है। यह "जैसे ही उनके संबंधित प्रतिक्रिया वापस आते हैं" उन्हें "प्रत्येक को संभाल नहीं लेते"। –
[मुझे पता है @ स्टीफन क्लेरी की टिप्पणी वास्तव में पुरानी है, लेकिन मैं नहीं चाहता था कि कोई भी उलझन में आने के लिए एक ही चीज़ सोच रहा हो।] यह उत्तर उन्हें प्रत्येक को अपने 'जारी रखें' कॉल में संभालता है (जिसका परिणाम वास्तविक कार्यों को ' कार्य 1' और 'task2')। प्रतीक्षित 'कब सभी' बस यह सुनिश्चित करता है कि उन दोनों "हैंडलिंग" कार्यों को निष्पादित किए जाने से पहले किसी भी पंक्ति से पहले किया जाता है। – patridge