इसमें कुछ समय घना है, लेकिन यहाँ जाता है ....कार्य पर प्रतीक्षा कैसे करता है। परिणाम नेस्टेड एसिंक/प्रतीक्षा विधियों को प्रभावित करता है?
को देखते हुए मैं बहुत की तरह एक अंतरफलक है कि:
public interface IWebClientHelper
{
TPayload Get<TPayload>(string url);
}
कहाँ Get
के कार्यान्वयन की आपूर्ति यूआरएल, को फोन करेगा जो TPayload
प्रकार के जेसन ऑब्जेक्ट वाली प्रतिक्रिया वापस कर देगा), और जेसन TPayload
में deserialized है और फिर लौटा दिया।
मैं Get
विधि अतुल्यकालिक के कार्यान्वयन बनाने के (या अधिक विशेष HTTP Get
विधि अतुल्यकालिक के भीतर निहित फोन करना) करना चाहते हैं, लेकिन जैसा कि मैंने यह समझते हैं, कि आवश्यकता होगी कि Get
विधि के हस्ताक्षर बदला जा करने के लिए:
Task<TPayload> Get<TPayload>(string url);
मैं इंटरफ़ेस रखने के लिए के रूप में यह है लक्ष्य कर रहा हूँ, तो मैं एक दूसरे अंतरफलक बनाया:
public interface IAsyncWebClientHelper
{
Task<TPayload> Get<TPayload>(string url);
}
और इंजेक्शन है कि मेरे कार्यान्वयन में IWebClientHelper
की प्रविष्टि।
public TPayload Get<TPayload>(string url)
{
return _asyncWebClientHelper.Get<TPayload>(url).Result;
}
और _asyncWebClientHelper
की Get
विधि लाइन
message = await httpClient.GetAsync(url);
तो इसमें इस बात पर मैं पर स्पष्ट नहीं कर रहा हूँ यह है:: तो अब IWebClientHelper
की मेरी कार्यान्वयन इस तरह दिखता है मैं सोच रहा लाइन है कि में सही हूँ return _asyncWebClientHelper.Get<TPayload>(url).Result
तब तक निष्पादन को अवरुद्ध कर देगा जब तक कि विधि वापस न आए? या उस विधि के अंदर await
कीवर्ड तब तक थ्रेड जारी करेगा जब तक कि उसे यूआरएल से प्रतिक्रिया प्राप्त न हो जाए?
यह सिंक-ओवर-एसिंक है जो एक विरोधी पैटर्न है। – usr