1

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

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

    // ... some operation...
}

// ... some operation 2...

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

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

好吧,但这只是一个“返回”功能。C# 怎么知道我是因为返回而tokenSource.Cancel()不是通常返回而返回?

4

2 回答 2

3

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

于 2013-04-21T11:08:53.600 回答
1

CancellationToken旨在一次将取消传播到整个操作集。一旦你Cancel()它的源,其他的延续将不会被调用。

于 2013-04-21T10:06:09.023 回答