据我所知,异步方法调用将在新线程中启动该方法,并立即将控制权交还给发起调用的线程.因此,在WinForm应用程序中,当在事件处理程序中调用异步方法时,该方法将由新线程执行,并且控件将立即返回到启动调用的线程,在这种情况下是UI线.此时,UI线程可用于响应其他用户请求,直到异步调用完成,因此UI线程可以继续执行事件处理程序内的代码.
我的问题是在同一个场景中会发生什么,而不是我们拥有的WinForms应用程序和asp.net web api控制器(或者用于web应用程序和web api的asp.net核心控制器)在WinForms中,UI线程是一个这将在调用异步方法后重新获得控制权,以便能够响应其他用户交互.asp.net web api(或asp.net核心)中的等效线程是什么,是否有任何其他形式的交互可以响应?
顺便说一句,我不是要问在控制器中使用异步方法是好还是坏.有些库只提供异步方法,所以它是不可避免的.我只想问是否有任何好处?
谢谢
对于IIS,.NET Framework维护一个用于为ASP.NET请求提供服务的线程池,但如果同步处理请求,则处理请求的线程在处理请求时很忙,并且该线程不能服务另一个请求,如果线程池拥有无限数量的线程,但它没有,这将不会有问题.因此,当您需要执行I/O密集型和其他非CPU绑定请求时,您将通过利用异步操作获得好处,如果您使用的是4之前的MVC版本,则可以使用AsyncController类,如果您使用异步方法正在使用MVC4或更高版本......
使用异步方法的一个好例子是,如果您的网站正在处理用户提交的文件.根据文件类型,正在进行哪种处理以及文件大小,这可能是一项资源密集且耗时的操作,因此使用异步方法执行文件操作会在这种情况下为您带来明显的好处......
看看这些文章:
在ASP.NET MVC中使用异步控制器
在ASP.NET MVC 4中使用异步方法
这个问题:
我应该在ASP.NET MVC 4上使用AsyncController吗?