【问题标题】:How were WebAPI requests cancelled in the olden days before async/await?在 async/await 之前的过去,WebAPI 请求是如何被取消的?
【发布时间】:2017-04-08 04:53:23
【问题描述】:

在 .NET 4.5 中,使用 async/await 模式,可以通过在异步控制器方法中包含 CancellationToken 轻松取消 Web 请求。这当然可以传递给任何异步实体框架方法,并且可以很好地取消整个事情。

但是追溯到 6 年前,在异步时代之前,WebAPI 或 MVC 控制器方法是如何被取消的?有可能吗?如果是这样,是否也可以在这些取消的请求中取消长时间运行的实体框架查询?

我提出这个问题的动机是,我进行了一些实验,发现在几乎所有情况下,我的大型 EF 查询的同步版本都比异步版本快。异步版本长 10% 到 50%。此外,我的应用程序供内部使用,实际上最多只能为 3 个并发用户提供服务,因此可扩展性不是问题。

简而言之,我想要老式的同步实体框架方法(因此,同步控制器方法)的速度,但具有可取消性。

【问题讨论】:

    标签: asp.net entity-framework async-await


    【解决方案1】:

    但是追溯到 6 年前,在异步时代之前,WebAPI 或 MVC 控制器方法是如何被取消的?甚至有可能吗?如果是这样,是否也可以在这些已取消的请求中取消长时间运行的实体框架查询?

    旧版 ASP.NET 使用 Thread.Abort 取消同步请求。这当然最终会导致应用程序不稳定,因此 ASP.NET 会定期回收您的应用程序域(和服务进程)。

    我不确定旧版 ASP.NET 是否使用 Thread.Abort 来取消异步请求(我的意思是在它们运行代码时)。我会这么认为,但我不确定。

    最后,请务必将您的性能问题通知 EF 团队。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-06-23
      • 1970-01-01
      • 2019-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-16
      相关资源
      最近更新 更多