Почему состояние этой задачи "RanToCompletion", хотя я ее отменил?
В следующем фрагменте кода у меня есть задача, которая отменяется, когда пользователь нажимает любую клавишу. При этом вызывается ContinuationTask о том, что задача была отменена. ContinuationTask настроен таким образом, что он запускается только после отмены задачи - и это действительно так.
Но когда я проверяю состояние задачи после завершения в вызывающем потоке, я получаю "RanToCompletion". Как это возможно?
Вот код:
private static void ContinuationForCanceledTask()
{
CancellationTokenSource tokenSource = new CancellationTokenSource();
CancellationToken token = tokenSource.Token;
Task t = Task.Run(
() =>
{
while (!token.IsCancellationRequested)
{
Console.WriteLine("Nelson: Haha! - I am still running!!");
Thread.Sleep(1000);
}
token.ThrowIfCancellationRequested();
}, token);
//This continuation task is invoked as expected
t.ContinueWith(
(tawsk) =>
{
Console.WriteLine("Tawsk was canceled");
}
, TaskContinuationOptions.OnlyOnCanceled);
Console.WriteLine("Press any key to stop Nelson from laughing at you...");
Console.ReadKey();
tokenSource.Cancel();
t.Wait();
//Returns "RanToCompletion"
Console.WriteLine("State of the Task is {0}", t.Status);
}