2017-10-27 34 views
9

तो, निम्न स्निपेट में, ReadAsStringAsync एक async विधि क्यों है?ReadAsStringAsync async क्यों है?

var response = await _client.SendAsync(request); 
var body = await response.Content.ReadAsStringAsync(); 

मूल रूप से मैं SendAsync उम्मीद स्मृति, जिस पर कि धारा पढ़ने बिंदु में-प्रक्रिया सीपीयू काम (और नहीं वास्तव में async) होगा में अनुरोध प्रतिक्रिया स्ट्रीम भेजने और लोड करने के लिए।

स्रोत कोड खरगोश की मांद नीचे जा रहे हैं, मैं इस पर पहुंचे:

int count = await _stream.ReadAsync(destination, cancellationToken).ConfigureAwait(false); 

https://github.com/dotnet/corefx/blob/0aa654834405dcec4aaa9bd416b2b31ab8d3503e/src/System.Net.Http/src/System/Net/Http/Managed/HttpConnection.cs#L967

यह मैं लगता है कि हो सकता है कनेक्शन खुला जब तक प्रतिक्रिया स्ट्रीम वास्तव में बाहर कुछ स्रोत से पढ़ा जाता है बनाता है प्रक्रिया का? मैं पूरी तरह से उम्मीद करता हूं कि एचटीपी कनेक्शन से स्ट्रीम कैसे काम करता है इसके बारे में कुछ बुनियादी सिद्धांतों में मुझे याद आ रही है।

+7

SendAsync जैसे ही * हेडर * प्राप्त होते हैं, लौटाता है। आपको अभी भी * सामग्री * को पढ़ना होगा जो आकार में कई केबी या एमबी हो सकता है। –

उत्तर

12

SendAsync() समाप्त होने के अनुरोध की प्रतीक्षा करता है और की प्रतिक्रिया शुरू होती है।

यह पूरी प्रतिक्रिया को बफर नहीं करता है; यह आपको स्मृति में पूरी प्रतिक्रिया को संभाले बिना बड़े प्रतिक्रियाओं को स्ट्रीम करने की अनुमति देता है।

+0

शायद https://docs.microsoft.com/en-us/windows/uwp/threading-async/call-asynchronous-apis-in-csharp-or-visual-basic के लिए एक लिंक बेहतर होगा। उत्तरदायित्व हमेशा एसिंक तरीकों को पसंद करने के लिए डिजाइन सिद्धांत है। –

+0

@LexLi यह लिंक किसी भी प्रश्न या उत्तर के लिए प्रासंगिक कैसे है? – Evk

+0

@Evk केवल पहले कुछ पैराग्राफ संबंधित हैं, जैसे "असिंक्रोनस एपीआई आपके एप को जारी रखने से पहले बड़े परिचालनों को पूरा करने के लिए इंतजार कर रही है। उदाहरण के लिए, इंटरनेट से जानकारी डाउनलोड करने वाला ऐप कई सेकंड तक पहुंचने के लिए प्रतीक्षा कर सकता है यदि आप जानकारी पुनर्प्राप्त करने के लिए एक सिंक्रोनस विधि का उपयोग करते हैं, तो विधि को तब तक अवरुद्ध कर दिया जाता है जब तक कि विधि वापस नहीं आती। ऐप उपयोगकर्ता इंटरैक्शन का जवाब नहीं देगा और क्योंकि यह गैर-प्रतिक्रियाशील लगता है, तो उपयोगकर्ता निराश हो सकता है। " –