取消令牌如何停止继续?

时间:2013-04-21 09:57:42

标签: c# winforms task cancellationtokensource cancellation-token

我有一个带有此代码的线程:

foreach (string file in allDirectoriesFiles)
{
    if (cancellationToken.IsCancellationRequested)
    {
        return;
    }

    // ... some operation...
}

// ... some operation 2...

请注意我使用的是return而不是break,因为如果我停止线程,则some operation 2不得执行。

我还注意到,以这种方式.ContinueWith它没有被执行。

嗯,但这只是一个“返回”功能。由于tokenSource.Cancel()而不是通常的回报,C#如何知道我正在返回?

2 个答案:

答案 0 :(得分:3)

您不应该使用相同的取消令牌创建延续,否则即使在执行之前,也会取消延续。使用不同的取消令牌(来自不同的取消源)创建续集,或者如果您始终希望取消执行,则只需创建它而不使用取消令牌。

答案 1 :(得分:1)

CancellationToken意味着立即将取消传播到整个行动集。一旦Cancel()来源,就不会调用其他延续。