异步GET请求如何工作?

时间:2016-05-26 19:20:55

标签: c# asynchronous asp.net-web-api

我认为从高级别的角度来看,我理解异步POST方法的基本原理。最大的好处是调用者可以快速响应,即使POST中的数据处理可能尚未完成。

但我真的不明白这是如何适用于GET方法的。响应需要包含数据,那么在处理完成之前如何进行响应?为什么API具有使用异步方法的GET请求处理程序?

我认为这个一般类型的问题并不重要,但我使用Web API编写C#。

3 个答案:

答案 0 :(得分:3)

在网络上没有异步HTTP调用。它只是通过TCP传输的数据。服务器无法判断客户端是内部同步还是异步。

  

来电者得到快速回复

实际上,服务器可以提前发送响应行和标题,并且数据延迟发送。但这与异步IO或异步.NET服务器实现无关。这只是一些早到,有些迟到的字节。

所以这里GET和POST没有区别。

  

为什么......利用异步方法?

它们可以为客户端和/或服务器带来可伸缩性优势。 HTTP级别没有区别。

答案 1 :(得分:1)

因此,应用程序可以执行其他不需要数据的操作。

如果你将GET实现为同步(并且假设你在一个糟糕的网络上,需要20秒才能获得它),你不能

  1. 显示进度
  2. 允许用户取消
  3. 让他们发起其他GET
  4. 让他们使用应用程序的其他部分
  5. 编辑(参见注释):服务器想要异步响应主要是出于同样的原因(放弃线程)。实际上获取数据可能是异步的并且需要一些时间 - 您不希望在整个时间内阻塞该线程。

答案 2 :(得分:0)

如果您正在构建RESTful API,其中GET应该返回资源(或集合)并且是幂等的(不进行任何更改),这没有任何意义。

如果您不遵循这些原则,GET请求可以异步执行某些工作。例如,GET /messages/3可以将消息返回给客户端,但然后异步执行其他工作,如:

  • 将邮件标记为已读
  • 向用户的其他客户端发送推送通知,指示消息已被读取
  • 将来30天安排cronjob删除消息

这些都不会被视为RESTful API,但仍会不时使用。