如何通过另一个请求停止长时间运行的请求

时间:2019-02-27 13:13:39

标签: asp.net request cancellation

我遇到以下情况。我有一个ASP NET应用程序,我想响应2路径:

  • /run-长期运行的任务
  • /abort

我会遇到一种情况,client1经过/run(开始任务),几分钟后client2将经过/abort,并取消{ task中的{1}}。

这可能吗?

1 个答案:

答案 0 :(得分:1)

  

这可能吗?

是的,以一种非常幼稚的方式,您的Controller代码看起来像:

private static CancellationTokenSource Source {get;set;}

public void Run()
{

  try{
     Source = new CancellationTokenSource();
     DoLongJob(Source.Token);
  }
  catch
  {
    Source = null;
  }
}

public void Abort()
{
   if(Source!=null) Source.Cancel();
   Source = null;
}

您将沿着DoLongJob方法和子调用的调用链传递CancellationToken。在代码的不同点,您将调用token.ThrowIfCAncellationResquested()

当然,这是非常基本的。它将只能同时使用一个Web服务器和一个任务。