我已经定义了以下任务
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();
在一些相关的说明中,必须传递取消令牌似乎是任务库的主要设计缺陷。