ASP.NET Core,它如何处理异步涉及的并发请求?

时间:2017-11-14 13:48:52

标签: asp.net-core

任何想法,当涉及异步时,ASP.net核心如何处理并发请求。正如您从下面的日志中看到的那样,请求完成时间看起来像顺序而不是并行或同时?我可能理解异步错误,希望有人可以解释为什么下面的请求完成时间顺序相当相同的时间?我期待至少每个请求都应该在几乎相同的时间内完成?

Connection id "0HL9BC18TNP25" started.
Connection id "0HL9BC18TNP26" started.
Connection id "0HL9BC18TNP27" started.
Connection id "0HL9BC18TNP28" started.
Connection id "0HL9BC18TNP29" started.
Connection id "0HL9BC18TNP2A" started.
Connection id "0HL9BC18TNP2B" started.
Connection id "0HL9BC18TNP2C" started.
Connection id "0HL9BC18TNP2D" started.
Connection id "0HL9BC18TNP2E" started.
Connection id "0HL9BC18TNP2C" completed keep alive response.
Request finished in 45.2835ms 200 application/json; charset=utf-8
Connection id "0HL9BC18TNP2C" received FIN.
Connection id "0HL9BC18TNP2C" disconnecting.
Connection id "0HL9BC18TNP2C" sending FIN.
Connection id "0HL9BC18TNP2C" sent FIN with status "0".
Connection id "0HL9BC18TNP2C" stopped.
Connection id "0HL9BC18TNP2D" completed keep alive response.
Request finished in 175.3974ms 200 application/json; charset=utf-8
Connection id "0HL9BC18TNP2D" received FIN.
Connection id "0HL9BC18TNP2D" disconnecting.
Connection id "0HL9BC18TNP2D" sending FIN.
Connection id "0HL9BC18TNP2D" sent FIN with status "0".
Connection id "0HL9BC18TNP2D" stopped.
Connection id "0HL9BC18TNP27" received FIN.
Connection id "0HL9BC18TNP27" completed keep alive response.
Request finished in 171.6836ms 200 application/json; charset=utf-8
Connection id "0HL9BC18TNP27" disconnecting.
Connection id "0HL9BC18TNP27" sending FIN.
Connection id "0HL9BC18TNP27" sent FIN with status "0".
Connection id "0HL9BC18TNP27" stopped.
Connection id "0HL9BC18TNP26" completed keep alive response.
Connection id "0HL9BC18TNP26" received FIN.
Request finished in 179.5263ms 200 application/json; charset=utf-8
Connection id "0HL9BC18TNP26" disconnecting.
Connection id "0HL9BC18TNP29" completed keep alive response.
Request finished in 189.1427ms 200 application/json; charset=utf-8
Connection id "0HL9BC18TNP2B" completed keep alive response.
Request finished in 179.8384ms 200 application/json; charset=utf-8
Connection id "0HL9BC18TNP26" sending FIN.
Connection id "0HL9BC18TNP2E" completed keep alive response.
Connection id "0HL9BC18TNP2E" received FIN.
Request finished in 187.7259ms 200 application/json; charset=utf-8
Connection id "0HL9BC18TNP2B" received FIN.
Connection id "0HL9BC18TNP29" received FIN.
Connection id "0HL9BC18TNP2B" disconnecting.
Connection id "0HL9BC18TNP2E" disconnecting.
Connection id "0HL9BC18TNP29" disconnecting.
Connection id "0HL9BC18TNP26" sent FIN with status "0".
Connection id "0HL9BC18TNP26" stopped.
Connection id "0HL9BC18TNP2B" sending FIN.
Connection id "0HL9BC18TNP2E" sending FIN.
Connection id "0HL9BC18TNP29" sending FIN.
Connection id "0HL9BC18TNP2E" sent FIN with status "0".
Connection id "0HL9BC18TNP2E" stopped.
Connection id "0HL9BC18TNP2B" sent FIN with status "0".
Connection id "0HL9BC18TNP2B" stopped.
Connection id "0HL9BC18TNP29" sent FIN with status "0".
Connection id "0HL9BC18TNP29" stopped.
Connection id "0HL9BC18TNP28" completed keep alive response.
Request finished in 190.027ms 200 application/json; charset=utf-8
Connection id "0HL9BC18TNP28" received FIN.
Connection id "0HL9BC18TNP28" disconnecting.
Connection id "0HL9BC18TNP28" sending FIN.
Connection id "0HL9BC18TNP28" sent FIN with status "0".
Connection id "0HL9BC18TNP28" stopped.
Connection id "0HL9BC18TNP2A" received FIN.
Connection id "0HL9BC18TNP2A" completed keep alive response.
Request finished in 209.3495ms 200 application/json; charset=utf-8
Connection id "0HL9BC18TNP2A" disconnecting.
Connection id "0HL9BC18TNP2A" sending FIN.
Connection id "0HL9BC18TNP2A" sent FIN with status "0".
Connection id "0HL9BC18TNP2A" stopped.
Connection id "0HL9BC18TNP25" completed keep alive response.
Request finished in 223.5798ms 200 application/json; charset=utf-8
Connection id "0HL9BC18TNP25" received FIN.
Connection id "0HL9BC18TNP25" disconnecting.
Connection id "0HL9BC18TNP25" sending FIN.
Connection id "0HL9BC18TNP25" sent FIN with status "0".
Connection id "0HL9BC18TNP25" stopped.

1 个答案:

答案 0 :(得分:1)

异步!=平行。 Async只做一件事,一件事,它允许线程在空闲时返回池,所以如果可以做其他工作而不是闲置。期。就这些。当您等待异步任务时,您的代码不会神奇地继续前进并继续处理。它“等待”(因此await)来完成工作。

如果您确实想同时运行一堆异步任务,可以使用Task.WhenAll

var tasks = new Task[]
{
    DoFirstAsync(),
    DoSecondAsync(),
    DoThirdAsync()
};
await Task.WhenAll(tasks);

这实际上只是创建一个等待所有其他Task完成的Tasks,因此您可以await来代替。{/ p>