【发布时间】:2019-10-02 19:24:09
【问题描述】:
我在比较 Thread.sleep 和 task.delay。从 db 检查作业完成状态。该作业将由其他一些 Azure 组件执行。
为了测试它,创建了具有同步和异步模式的小 api。
http rest api 使用异步:
public async Task<HttpResponseMessage> Post()
{
await Task.Delay(200);
return await Task.FromResult(new HttpResponseMessage());}
http rest api 使用同步:
public HttpResponseMessage Post()
{
Thread.sleep(200);
return new HttpResponseMessage();}
有趣。结果对同步调用很好。使用 Apache jmeter 对 100 个用户进行了 5 次迭代。
同步结果:最小:414 毫秒,平均:8464 毫秒
异步结果:最小 1756 毫秒平均:10044 毫秒
为什么 Thread.sleep 比 Async 更好。这是任务创建的开销吗?难道我不能得到比这两个更好的结果吗?
【问题讨论】:
-
async并非旨在降低延迟 - 周围有很多基础设施,因此与更多“裸机”调用相比,延迟更高是可以预期的。顺便说一句,目前还不清楚“更好的结果”是什么意思。 -
您可以将代码简化如下:
return new HttpResponseMessage();- 不需要await Task.FromResult
标签: c# .net multithreading azure async-await