【发布时间】:2016-11-28 14:35:36
【问题描述】:
我对取消几个任务感到困惑并继续执行一个任务以显示结果。 据我了解,这个程序应该显示
任务取消
CancellationTokenSource cts = new CancellationTokenSource();
List<Task> tasks = new List<Task>();
for(int i= 0; i<3; i++)
{
tasks.Add(Task.Run(() =>{
while(!cts.Token.IsCancellationRequested)
Thread.Sleep(500);
// Uncomment this to see 'Tasks canceled' in the result
//if(cts.Token.IsCancellationRequested)
// cts.Token.ThrowIfCancellationRequested();
},cts.Token));
}
Task.WhenAll(tasks).ContinueWith(task =>
{
if(task.IsCanceled)
Console.WriteLine("Tasks canceled");
if(task.IsCompleted)
Console.WriteLine("Tasks completed");
});
Thread.Sleep(2000);
cts.Cancel();
不幸的是它显示
任务完成
如果我取消注释程序显示的取消异常抛出
任务取消
任务完成
为什么?似乎我错过了什么,但我没有看到什么......
【问题讨论】:
-
完成是真的,因为它结束了.. 不是因为它一直到最后没有问题
-
“取消”取消令牌不会自动取消任何任务。如果你不
ThrowIfCancellationRequested,任务根本不会被取消,所以你看不到预期的输出。 -
在此处查看对第二个已接受答案的第二条评论:stackoverflow.com/questions/7343211/…
标签: c# multithreading task