使用函数时,我需要取消 Parallel.For 所做的所有任务。例如:
class Example
{
private CancellationTokenSource cts;
public Example()
{
cts = new CancellationTokenSource();
}
public void plsCompute()
{
ParallelOptions po = new ParallelOptions{ CancellationToken = cts.Token };
Parallel.For(0, 10, po, (i) => compute());
}
public void plsStopComputing()
{
cts.Cancel();
}
public void compute()
{
for(int i=0;i<100000;i++){
if(//token was cancelled){
Console.WriteLine("Cancelled");
return;
}
//do something
}
}
我需要停止当前正在运行的所有任务,而不是创建新任务。
有什么办法可以做到这一点?
我见过的所有例子都是用 lambda 制作的函数,所以我可以在那里访问 cts。我需要它在其他功能。另外,如果我将令牌作为参数传递,它也不起作用。cts 令牌已更改,但在其他线程中它没有更改。
任何帮助appriciated :)
编辑
正如我在评论中提到的,我更深入了,这个例子并不是我想要的。这些方法由 wpf 应用程序通过 msmq 发送的消息调用。我认为每次我从 wpf 调用时,服务都会创建此类的新实例,因此它会取消新实例而不是已经在计算的实例。有没有办法调用同一个实例?