rest - Asp.Net Web Api 中的异步操作是否以某种方式帮助用户?
问题描述
如果我有一个 Web Api 服务(没有 GUI),并且用户的 Get 请求要求我获取数据,这将需要 15 秒来检索它,
让我们说这是我的行动:
[HttpGet]
public async Task<HttpResponseMessage> GetSomeAsync([FromUri]NiceRequestObject request)
{
var response = await _niceService.F1Async(request); //15 seconds duration.
return Request.CreateResponse(response);
}
那么对用户有什么好处呢?我将线程释放回线程池的事实......用户将如何以某种方式“感受”它?无论如何,用户都需要等待这 15 秒。
解决方案
tl;博士
这不是 UI 体验优化。它可以改善 UI 体验,但这确实是一个副作用。这可以帮助您优化线程利用率。这意味着您可以用更少的线程处理更多请求。这意味着您可以拥有更便宜的服务器和/或可以在现有基础架构上处理更多请求。
用户将如何以某种方式“感受”它?
当 10,000 人同时请求您的页面并且您的服务器有更好的机会处理所有这些请求(包括这个虚构的“用户”)而不会耗尽线程时,用户会感觉到它。归根结底,这是一个服务器优化。
无论如何,用户都需要等待这 15 秒。
除非您服务器上的所有线程都用完,否则用户在请求此资源时会收到错误消息(取决于其他技术)并且必须重新提交。这意味着他们将不得不等待超过 15 秒。
推荐阅读
- javascript - 在没有 API 的情况下获取 Instagram 个人资料的关注者数量
- android - Mapbox 运行时崩溃:以未捕获的 jni::PendingJavaException 类型异常终止
- assembly - 试图理解这个 MIPS 函数,如果它的输入是负数就会分支
- r - 对 lmer 和 glmer 模型使用 aictab()
- redis - 负载均衡器后面的 Redis 集群?
- javascript - 链接排序和过滤器不起作用javascript
- java - Maven War:部署描述符的文件名
- git - 如何将我在 GitHub 上保存的文件提交到不同的分支?
- jenkins - 有没有办法编写一个保持状态跨运行的詹金斯工作?
- processing - 处理:按键时查看立方体的侧面