首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ContinueWith a取消的任务

ContinueWith a取消的任务
EN

Stack Overflow用户
提问于 2012-08-09 21:37:15
回答 1查看 12.9K关注 0票数 11

我定义了以下任务

代码语言:javascript
复制
var t = Task.Factory.StartNew(
    () => LongRunningMethod( cancellationToken ),
    cancellationToken
);

t.ContinueWith(
    Callback,
    cancellationToken,
    TaskContinuationOptions.None,
    TaskScheduler.FromCurrentSynchronizationContext()
);

LongRunningMethod中,我检查取消令牌是否请求取消,如果有,则从方法返回。那么多就行了。

但是,在此场景中不会调用回调。如果我将上面的第二行替换为

代码语言:javascript
复制
t.ContinueWith(
    x => Callback( x, cancellationToken ),
    TaskScheduler.FromCurrentSynchronizationContext()
);

在这种情况下,任务仍然认为已经完成。

为什么第一个电话不起作用?我的印象是,TaskContinuationOptions.None意味着无论线程的状态如何,回调都将被调用。

我要取消这项任务,打电话给:

代码语言:javascript
复制
_cancellationTokenSource.Cancel();

从某种程度上讲,必须传递取消令牌似乎是任务库的一个主要设计缺陷。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-09 21:38:48

您的继续任务接受您取消的CancellationToken。这意味着继续任务在未启动时将被取消。不要把那个记号传给你不想取消的东西。

CancellationToken的意思是立即取消整个动作图。您可以通过不传递令牌来从取消中排除内容。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11892315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档