如何从外部代码取消正在运行的任务

时间:2019-07-14 11:21:55

标签: task-parallel-library cancellationtokensource

我有一个Controller和一个static Task;作为其中的一个领域。 在一个请求上,我希望能够异步启动该任务,而在另一个请求上,我希望能够取消它。 该服务器一次只能运行一个任务,因此这就是我使它static的原因。

但是我尝试使用CancellationTokenSource取消任务,但并不能停止任务。

控制器

public class TaskController
{
 private static Task myTask;
 private static CancellationTokenSource tcs=new CancellationTokenSource();

 [Route([start Route])
 public async Task Start()
 {
   this.myTask=Task.Run(()=>..... , tcs.Token);
 }

 [Route([stop Route])
 public async Task Stop()
 {
   tcs.Cancel();
 }
}

我已经阅读了文档,其中指出您需要从任务内部轮询token.IsCancellationRequested才能将其关闭。

不幸的是,对于我来说没有运行我可以测试条件的循环,也没有在特定部分抛出异常。
我需要能够在执行任务的任何时候从外部代码取消它。

public void TaskDelegateMethod()
{
    //line 1 of code
    //line 2 of code            //i want it to be able to happen on any line
    ......                      //not checking token.IsCancellationRequested
    //line n of code
}

PS 我将从UI运行两个命令,以确保线程安全(如果需要)

0 个答案:

没有答案