首页 > 解决方案 > 如何从已取消的线程中释放内存和 CPU 使用率?

问题描述

CancellationToken如果用户在 GET 请求后关闭选项卡,我已经习惯于ActionFilter取消任务(因为这是一项繁重的任务,即需要 20 秒的时间和内存)。

if (!token.IsCancellationRequested)
{
   token.Register(() => { throw new OperationCanceledException(token); });
}

在控制器操作中,我有GetAsync进行大量计算的方法。

现在,当从浏览器发出 GET 请求并在 5 秒后关闭浏览器选项卡时,它会抛出异常并继续执行直到完成。我希望它进一步停止处理并释放内存和 CPU。

我在取消任务后使用了断点,它仍然计算没有用的结果(18,00,000 个结果),除了抛出异常之外,取消也没有任何效果。

由于打开/关闭原则,我也无法将令牌传递给 Controller 并在那里做一些事情。

我试过Environment.Exit(0)了,但它关闭了 IIS Express 并停止了服务器。

请告诉我一种在抛出取消异常后立即释放内存和 CPU 使用率的方法。

标签: c#.net-coretaskaction-filtercancellation-token

解决方案


推荐阅读