Asp.net 如何通过另一个请求停止长时间运行的请求
我有以下情况。我有一个Asp.net 如何通过另一个请求停止长时间运行的请求,asp.net,request,cancellation,Asp.net,Request,Cancellation,我有以下情况。我有一个ASP-NET应用程序,我想响应2路径: /run-长时间运行的任务 /abort 我会有这样一个场景,client1通过/run(启动任务),几分钟后client2将通过/abort,并取消client1的任务 这可能吗 这可能吗 是的,在一种相当幼稚的方法中,您的控制器代码如下所示: private static CancellationTokenSource Source {get;set;} public void Run() { try{ S
ASP-NET
应用程序,我想响应2
路径:
-长时间运行的任务/run
/abort
client1
通过/run
(启动任务),几分钟后client2
将通过/abort
,并取消client1
的任务
这可能吗
这可能吗
是的,在一种相当幼稚的方法中,您的控制器代码如下所示:
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服务器和一个任务。问题是,一次不会只有一个任务。会有许多任务启动程序和任务停止程序。我需要查找长时间运行的任务,并在请求通过时取消它们。基本上,我将有N
客户端,每个客户端都可以启动长时间运行的任务并随时取消他们的任务。@Bercovicadrian然后您需要修改上面的代码来处理CancellationTokenSource
的Dictionnary
,哪个键是用户ID,或者由Run
返回的taskId,我不知道您可以暂停任务
。这是通过CancellationTokenSource
-sToken.WaitHandle.WaitOne
?这是否会阻止线程池中的底层运行线程,并使其无法用于其他请求?