我有一个带有此代码的线程:
foreach (string file in allDirectoriesFiles)
{
if (cancellationToken.IsCancellationRequested)
{
return;
}
// ... some operation...
}
// ... some operation 2...
请注意我使用的是return
而不是break
,因为如果我停止线程,则some operation 2
不得执行。
我还注意到,以这种方式.ContinueWith它没有被执行。
嗯,但这只是一个“返回”功能。由于tokenSource.Cancel()
而不是通常的回报,C#如何知道我正在返回?
答案 0 :(得分:3)
您不应该使用相同的取消令牌创建延续,否则即使在执行之前,也会取消延续。使用不同的取消令牌(来自不同的取消源)创建续集,或者如果您始终希望取消执行,则只需创建它而不使用取消令牌。
答案 1 :(得分:1)
CancellationToken意味着立即将取消传播到整个行动集。一旦Cancel()来源,就不会调用其他延续。