我知道在某些情况下异步调用可能是一个有用的工具。如果您在处理异步调用时能够执行其他操作,则可以加快应用程序的运行。
但是,在IIS中运行的MVC应用程序中,我没有看到代码的任何好处,例如: var result = await SignInManager.PasswordSignInAsync(model.Username,model.Password,model.RememberMe)
我的理解是IIS已经将请求分配给它可用的线程,如果你总是等待,那么产生新线程就不会买任何东西。在这个例子中,我们所做的只是为上下文切换增加一些开销。由于" await",分配用于处理请求的线程在任何时候都不会被释放。
我错过了什么吗?在我们等待的时候,线程是否可供IIS使用?如果我们总是等待来自某个方法的响应,是否有异步使它异步进入?
答案 0 :(得分:0)
如果你总是等待,那么产生一个新线程就不会买任何东西
您遇到的大多数异步方法do not spawn a thread。相反,他们会启动一些外部操作,然后在操作完成时完成Task
。
由于" await"
,因此不会在任何时候释放分配用于处理请求的线程。
除此之外。请求处理与线程无关。当您await
时,您的当前线程被释放,可以自由处理其他请求。完成await
后,请求的处理将继续从池中的某个线程开始(可能与以前相同,或者它可能是不同的线程)。