Здравствуйте. Почему в следующих двух случаях у задачи в итоге будет разный статус? С тем учётом, что
token.IsCancellationRequested = true. Почему меняется функциональность, если по факту там написан эквивалент if(true)?
1. Здесь Status = Canceled
CancellationTokenSource cts = new CancellationTokenSource(1);
var token = cts.Token;
var task = Task.Run(() =>
{
Thread.Sleep(5);
// if(token.IsCancellationRequested)
throw new OperationCanceledException(token);
});
Thread.Sleep(50);
Console.WriteLine(task.Status);
2. Здесь будет Faulted.
CancellationTokenSource cts = new CancellationTokenSource(1);
var token = cts.Token;
var task = Task.Run(() =>
{
Thread.Sleep(5);
if(token.IsCancellationRequested) // true
throw new OperationCanceledException(token);
});
Thread.Sleep(50);
Console.WriteLine(task.Status);
UPD: Интересно, что в первом случае, даже если не передавать в конструктор CancellationTokenSource единицу, всё равно будет Status = Canceled.