gpt4 book ai didi

c#-4.0 - 继续取消任务

转载 作者:行者123 更新时间:2023-12-02 21:29:16 25 4
gpt4 key购买 nike

我定义了以下任务

var t = Task.Factory.StartNew(
() => LongRunningMethod( cancellationToken ),
cancellationToken
);

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

LongRunningMethod内,我检查取消 token 是否有取消请求,如果有,我从该方法返回。这样就可以了。

但是,在这种情况下不会调用回调。如果我将上面的第二行替换为

,回调 确实会被调用
t.ContinueWith(
x => Callback( x, cancellationToken ),
TaskScheduler.FromCurrentSynchronizationContext()
);

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

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

我通过调用取消任务:

_cancellationTokenSource.Cancel();

在某种程度上相关的说明中,必须传递取消 token 似乎是任务库的一个主要设计缺陷。

最佳答案

您的继续任务需要您取消的 CancellationToken。这意味着延续任务虽然尚未启动,但已被取消。不要将该 token 传递给您不想取消的事物。

CancellationToken 旨在立即取消整个操作图。您可以通过不传递 token 来将某些内容排除在取消之外。

关于c#-4.0 - 继续取消任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11892315/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com