use*_*225 9 asynchronous task c#-4.0
我已经定义了以下任务
var t = Task.Factory.StartNew(
() => LongRunningMethod( cancellationToken ),
cancellationToken
);
t.ContinueWith(
Callback,
cancellationToken,
TaskContinuationOptions.None,
TaskScheduler.FromCurrentSynchronizationContext()
);
Run Code Online (Sandbox Code Playgroud)
在里面LongRunningMethod,我检查取消令牌是否有请求取消,如果是,我从方法返回.那很好用.
但是,在此方案中不会调用Callback.回调不被调用,如果我替换上面的第二行
t.ContinueWith(
x => Callback( x, cancellationToken ),
TaskScheduler.FromCurrentSynchronizationContext()
);
Run Code Online (Sandbox Code Playgroud)
在这种情况下,任务仍然认为它已完成.
为什么第一次通话不起作用?我的印象TaskContinuationOptions.None是,无论线程的状态如何,都会调用回调.
我通过调用取消任务:
_cancellationTokenSource.Cancel();
Run Code Online (Sandbox Code Playgroud)
在一个有点相关的说明,不得不传递取消令牌似乎是任务库的主要设计缺陷.
usr*_*usr 17
您的继续任务采用您取消的CancellationToken.这意味着继续任务虽然未启动,但正在取消.不要将该标记传递给您不想取消的标记.
CancellationToken旨在立即取消整个行动图.您可以通过不传递令牌来排除取消内容.
| 归档时间: |
|
| 查看次数: |
9292 次 |
| 最近记录: |