在asp.net web api控制器中使用异步方法是否有好处?

6
据我所知,异步方法调用将在新线程中启动该方法,并立即将控制权交回到启动调用的线程。因此,在WinForm应用程序中,当事件处理程序内有异步方法调用时,该方法将由一个新线程执行,并立即将控制权返回到启动调用的线程,也就是UI线程。在这一点上,UI线程可用于响应其他用户请求,直到异步调用完成,然后UI线程可以恢复事件处理程序内代码的执行。
我的问题是,在同样的情况下,如果我们不是在WinForms应用程序中而是在asp.net Web API控制器(或同时适用于Web应用程序和Web API的asp.net core控制器)中,会发生什么? 在WinForms中,UI线程是调用异步方法后重新获得控件的线程,以便能够响应其他用户交互。在asp.net web api(或asp.net core)中,等价的线程是什么,是否还有其他形式的交互可以响应?
顺便说一句,我不是在问在控制器中使用异步方法好坏的问题。有些库只提供异步方法,因此这是不可避免的。我只是想问一下是否有任何好处?
谢谢

4
http://blog.stephencleary.com/2013/11/there-is-no-thread.html - Alexan
1个回答

14
当涉及到IIS时,.NET Framework维护了一组线程,用于服务ASP.NET请求。如果请求是同步处理的,则处理请求的线程在处理请求时处于繁忙状态,并且该线程不能服务其他请求。由于线程池没有无限数量的线程可供使用,因此我们可能会遇到同步接口的问题。因此,当您需要执行I/O密集型和其他非CPU绑定的请求时,通过利用异步操作,您将获得好处。如果您使用MVC版本4或更高版本,则可以使用async方法,否则可以使用AsyncController Class
使用异步方法的好处之一是,如果您的网站正在处理用户提交的文件,则会有明显的好处。根据文件类型、正在进行的处理以及文件大小,这可能是一个资源密集型和耗时的操作,因此使用异步方法执行文件操作将在这种情况下为您带来明显的好处。
查看这些文章:

以及这个SO问题:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接