6
我已经定义了以下任务ContinueWith已取消的任务
var t = Task.Factory.StartNew(
() => LongRunningMethod(cancellationToken),
cancellationToken
);
t.ContinueWith(
Callback,
cancellationToken,
TaskContinuationOptions.None,
TaskScheduler.FromCurrentSynchronizationContext()
);
的LongRunningMethod
里面,我检查取消标记已请求取消,如果是这样,我从方法返回。这很好。
但是,在这种情况下不会调用回调。回调确实被调用,如果我取代以上
t.ContinueWith(
x => Callback(x, cancellationToken),
TaskScheduler.FromCurrentSynchronizationContext()
);
在这种情况下,任务仍然认为它运行完成第二行。
为什么第一个电话不工作?我的印象是TaskContinuationOptions.None
意味着无论线程的状态如何,回调都会被调用。
我取消任务致电:
_cancellationTokenSource.Cancel();
在一个有点相关的说明,不必绕过取消标记好像任务库的主要设计缺陷。
然后TaskContinuationOptions.None做什么?如果我说TaskContinuationOptions.OnlyOnCancelled,那也不起作用。 – user981225 2012-08-09 21:42:31
如果* parent *任务被取消,TaskContinuationOptions提供了一种不执行的方法。 CancellationToken参数是独立的。 – usr 2012-08-09 21:54:28