Я смущаюсь за отмену нескольких задач и продолжаю задачу по отображению результата. Согласно тому, что я понял, эта программа должна отображатьОтмена задач и продолжение с
Задачи отменили
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();
К сожалению, отображение
Задачи, решаемые
Если я раскомментировать бросание отменить исключение дисплей программа
Задачи отменили
Задачи, решаемые
Почему? кажется, что я что-то пропустил, но я не вижу, что ...
Завершено верно, потому что оно закончилось .. не потому что оно дошло до конца без проблем – BugFinder
Чтобы «отменить» токен отмены, автоматически не отменяет никаких задач. Если вы не выполняете «ThrowIfCancellationRequested», задача просто не отменяется, поэтому вы не видите ожидаемого результата. –
См. Второй комментарий к второму принятому отвечу здесь: http://stackoverflow.com/questions/7343211/cancelling-a-task-is-throwing-an-exception – PaulF