【发布时间】:2015-05-20 06:05:24
【问题描述】:
我有一个 Task 通过繁重的进程在其体内运行。另外,我们无法访问这个方法的主体(繁重的进程),我们必须等到完成这个过程。
现在我的问题是,如何在不中断任务的情况下取消,这样我就不会检查其中的任何值?
我的代码是这样的:
private CancellationTokenSource CTS = new CancellationTokenSource();
public void CallMyMethod(CancellationTokenSource cts)
{
//
// Several methods they call each other. And pass tokens to each other.
MyProcess(cts);
}
private void MyProcess(CancellationTokenSource cts)
{
CancellationToken token = cts.Token;
Task.Run(() =>
{
token.ThrowIfCancellationRequested(); // Work just when ThrowIfCancellationRequested called. and check that again
if (token.IsCancellationRequested) // Must be checked every time, and after the investigation not work.
return;
// My long time process
HeavyProcess(); // We have no access to the body of this method
}, token);
}
private void CancelProcess()
{
try
{
//
// I want to cancel Now, Just Now not after HeavyProcess completion or checking token again!
//
CTS.Cancel();
CTS.Token.ThrowIfCancellationRequested();
}
catch
{ }
}
运行后我可以取消繁重的进程吗?
【问题讨论】:
-
丢弃正在运行的
Task可以吗,还是需要完全中止它? -
只要在运行时中止它,我就不会再继续那个工作了!
标签: c# .net parallel-processing task-parallel-library cancellationtokensource