【问题标题】:ASP.NET WebAPI 2 Async filtersASP.NET WebAPI 2 异步过滤器
【发布时间】:2014-02-02 13:30:30
【问题描述】:

WebAPI 2 支持异步过滤方法。 我看不到这种异步过滤器方法的意义,或者我可能误解了它们? 由于过滤器需要在控制器方法之前执行,它必须同步运行!?那为什么异步过滤器要带来优势呢?它与来自 webapi 的线程处理有关吗? 我的问题清楚吗? 预先感谢您的回答! 最好的 月桂酸

【问题讨论】:

    标签: c# asp.net asynchronous asp.net-web-api


    【解决方案1】:

    异步和并行是两个不同的东西。您不能并行运行操作方法和操作过滤器,因为您需要先执行过滤器 (OnActionExecuting)。但是,OnActionExecuting 是异步的只是意味着它是非阻塞的。

    假设您必须进行一个长时间运行的网络调用,可能是在您的过滤器代码中运行 10 秒的 HTTP 请求。在同步(或阻塞)过滤器代码的情况下,运行过滤器代码的线程将被阻塞 10 秒,直到 HTTP 调用返回。在这 10 秒内,线程只是被阻塞,没有做任何有用的事情。

    在异步过滤器的情况下,运行过滤器的线程不会被阻塞。相反,它将返回到池中,并准备好在 10 秒长的 HTTP 调用正在进行时为其他请求提供服务。当线程返回到池中时,Web API 管道执行暂停。一旦 HTTP 调用完成并且结果可用,过滤器代码将在同一线程或其他线程中恢复执行,并且 Web API 管道从暂停点开始运行。

    因此,仅仅因为过滤器代码是异步的,并不意味着当过滤器触发的 HTTP 调用正在进行时,管道执行将继续进行。只是运行管道的线程没有被阻塞并被释放到池中。

    假设您正在阅读一本书,并且遇到了一些您不太清楚的内容,请询问您的朋友谁是该主题的专家。您的朋友需要几分钟来回答您。在那段时间里,你不需要继续盯着书看。同时,说你不能继续阅读。因此,您只需放置一个书签并快速执行一些操作,例如在手机中查看网站或其他内容。现在,朋友回答,你得到你想要的,然后继续阅读。

    【讨论】:

      猜你喜欢
      • 2021-06-22
      • 1970-01-01
      • 2017-03-27
      • 2014-08-03
      • 2013-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多