我有一个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
运行两个命令,以确保线程安全(如果需要)