我有这个代码主题:取消令牌如何停止继续?
foreach (string file in allDirectoriesFiles)
{
if (cancellationToken.IsCancellationRequested)
{
return;
}
// ... some operation...
}
// ... some operation 2...
通知我使用return
,而不是break
,因为如果我停止线程的some operation 2
不能执行。
我还注意到,在这种方式下.ContinueWith它没有执行。
那么,但这只是一个“返回”功能。由于tokenSource.Cancel()
而不是通常的返回,C#如何知道我正在返回?
好吧!所以:如果当前线程被执行,我只能停止检查它内部的取消标记(实际上它不会强制线程退出,换句话说:如果我没有检查,它会一直持续到结束如果继续函数没有启动,那么调用取消标记就不会(如果没有我手动检查),对吗? – markzzz 2013-04-21 12:54:29
是的,这是正确的,即使是'正常'任务也不会被执行,如果取消令牌(创建它)在任务被任务调度程序处理之前被取消,你只能在你自己的任务中检查这个标记,这样你可以取消一个长时间运行的循环,等等。O和一个注释:结束一个任务并不一定意味着线程(即运行的线程)退出,即使抛出异常也是如此。 – 2013-04-21 13:09:30