Lau*_*nSt 2 c# asp.net asynchronous asp.net-web-api
WebAPI 2支持异步过滤方法.我没有看到这种异步过滤方法的意义,或者我想念它们?由于过滤器需要在控制器方法之前执行,因此它必须同步运行!?为什么异步过滤器会带来优势呢?它与webapi中的线程处理有关吗?我的问题清楚了吗?提前谢谢你的回答!最好的劳林
Bad*_*dri 19
异步和并行是两回事.您无法并行运行操作方法和操作筛选器,因为您需要OnActionExecuting首先执行filter().但是,OnActionExecuting异步只是意味着它是非阻塞的.
假设您必须进行长时间运行的网络调用,可能是一个HTTP请求,在您的过滤器代码中运行10秒钟.在同步(或阻塞)过滤器代码的情况下,运行过滤器代码的线程将被阻塞10秒,直到HTTP调用返回.在这10秒钟内,线程被简单地阻止,并没有做任何有用的事情.
在异步过滤器的情况下,不会阻止运行过滤器的线程.相反,它将返回到池中,并且在10秒长的HTTP调用正在进行时,它将准备好为其他一些请求提供服务.线程返回池时,Web API管道执行暂停.一旦完成HTTP调用并且结果可用,过滤器代码将在同一个线程或其他某个线程中恢复执行,并且Web API管道从其暂停的位置开始运行.
因此,仅仅因为过滤器代码是异步的,并不意味着当过滤器触发的HTTP调用正在进行时,管道执行将继续进行.只是运行管道的线程没有被阻塞并被释放到池中.
说,你正在读一本书,你遇到了一些你不太清楚的事情,并问你的朋友谁是这方面的专家.你的朋友花了几分钟回答你.在此期间,您无需继续盯着这本书.同时,说你不能继续阅读.因此,您只需放置书签并快速执行某些操作,例如检查手机中的网站或其他内容.现在,朋友回答,你得到你想要的东西,然后继续阅读.