parallel.invoke取消令牌

| 使用Parallel.Invoke时,您可以传入包含cancelationToken的ParallelOptions。是否可以在调用中使用该令牌来确定是否应该退出?是否应该在操作中使用对CancellationTokenSource的引用?
CancellationTokenSource cts = new CancellationTokenSource();
ParallelOptions po = new ParallelOptions();
po.CancellationToken = cts.Token;

Parallel.Invoke(po,
        new Action(() => { if (cts.IsCancellationRequested) return; Console.WriteLine(\"Invoked Method 1\"); }),
        new Action(() => { if (cts.IsCancellationRequested) return; Console.WriteLine(\"Invoked Method 2\"); }),
        new Action(() => { if (cts.IsCancellationRequested) return; Console.WriteLine(\"Invoked Method 3\"); cts.Cancel(); }),
        new Action(() => { if (cts.IsCancellationRequested) return; Console.WriteLine(\"Invoked Method 4\"); }),
        new Action(() => { if (cts.IsCancellationRequested) return; Console.WriteLine(\"Invoked Method 5\"); })
    );
更新:取消发生为时已晚。我在调用的方法之外进行操作。 注意:如果取消操作发生得足够快,则将引发Parallel.Invoke,但否则,被调用的方法将成功退出。     
已邀请:
        是。例如:
CancellationToken ct = tokenSource.Token;

ParallelOptions po = new ParallelOptions { CancellationToken = ct; };

Parallel.Invoke(po
    () => { Console.WriteLine(ct.IsCancellationRequested); },
    // etc
);
特别是,您可以将取消令牌传递给其他方法,这些方法可能会将其传播到异步任务。     
        msdn上有一个很好的例子。 看来您既可以查询状态,又可以使用cancelleToken通知调度程序。 http://msdn.microsoft.com/en-us/library/dd997364.aspx     

要回复问题请先登录注册