You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET Core Web API异步接口请求时长不符合预期问题排查

.NET Core异步Web API请求串行执行问题解析

问题详情

我在.NET Core Web API中实现了如下异步接口:

[HttpGet]
public async Task<ActionResult<List<Product>>> GetProduct()
{
    await Task.Delay(10000);
    return await Task.FromResult(Ok(Products));
}

按照async异步编程的认知,异步操作不会阻塞线程,服务器应该能复用线程同时处理多个请求。但从同一浏览器发起两个独立请求时,第二个请求耗时20秒才完成,而非预期的10秒。这是对async的理解有误,还是代码存在问题?

[更新]已确认问题源于同一浏览器触发请求。

问题原因

  • 你对async的理解是正确的,代码本身也没有错误:Task.Delay是典型的异步非阻塞操作,API的异步逻辑不会占用线程等待,服务器端完全具备同时处理多个请求的能力。
  • 问题出在浏览器的同源请求策略:多数现代浏览器会对同一域名下的相同GET请求(尤其是携带相同凭证如Cookie的请求)进行排队处理,浏览器会等待第一个请求完成后再发送第二个,以此避免重复请求或缓存冲突,最终导致第二个请求的总耗时看起来是20秒。

验证与优化建议

  • 验证:使用不同浏览器、Postman、curl等工具同时发起请求,就能看到两个请求均在10秒左右完成,证明服务器端的异步逻辑是并行处理的。
  • 代码优化:return await Task.FromResult(Ok(Products));可简化为return Ok(Products);,Ok()直接返回ActionResult类型,无需额外封装Task.FromResult,不影响功能但代码更简洁。

内容的提问来源于stack exchange,提问作者Jero Lopez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 06:05:23