C# 为什么ReadAsStringAsync是异步的?

C# 为什么ReadAsStringAsync是异步的?,c#,.net,.net-core,C#,.net,.net Core,那么,在下面的代码片段中,为什么ReadAsStringAsync是一个异步方法 var response = await _client.SendAsync(request); var body = await response.Content.ReadAsStringAsync(); 最初,我希望SendAsync发送请求并将响应流加载到内存中,此时读取该流将是进程内CPU工作(而不是真正的异步) 在源代码兔子洞中,我得出以下结论: int count = await _stream.R

那么,在下面的代码片段中,为什么ReadAsStringAsync是一个异步方法

var response = await _client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
最初,我希望SendAsync发送请求并将响应流加载到内存中,此时读取该流将是进程内CPU工作(而不是真正的异步)

在源代码兔子洞中,我得出以下结论:

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

这让我想到,在响应流实际从进程外的某个源读取之前,连接可能是开放的?我完全希望我缺少一些关于Http连接流如何工作的基础知识

SendAsync()
等待请求完成,响应开始到达


它不会缓冲整个响应;这使您可以流式传输大型响应,而无需将整个响应保存在内存中。

SendAsync会在收到标头后立即返回。你仍然需要阅读的内容可以是很多KBs或MBs大小。也许链接到会更好。响应性是这里的设计原则,总是喜欢异步方法。@LexLi这个链接与问题或答案有什么关系?@Evk只有前几段是相关的,如“异步API使您的应用程序在继续执行之前不会等待大型操作完成。例如,从互联网下载信息的应用程序可能会花费几秒钟等待信息到达。如果使用同步方法检索信息,则应用程序将被阻止,直到该方法返回。该应用程序不会对用户交互做出响应,因为它似乎没有响应,用户可能会感到沮丧。“谢谢!我想我应该先检查文档:>”此操作不会被阻止。根据completionOption参数的值,返回的任务对象将在响应可用或读取包括内容在内的整个响应后立即完成。“默认完成选项似乎是ResponseContentRead,这意味着默认情况下不正确