使用CancellationTokenSource取消TaskCompletionSource不会更新Task.Stat

本文关键字:更新 Task Stat CancellationTokenSource 取消 TaskCompletionSource 使用 | 更新日期: 2023-09-27 18:22:26

这对我来说似乎毫无意义:

var cts = new CancellationTokenSource();
cts.Cancel();
var tcs = new TaskCompletionSource<int>();
try
{
    tcs.Task.Wait(cts.Token);
}
catch (OperationCanceledException)
{   
    Console.WriteLine(tcs.Task.Status); //TaskStatus.WaitingForActivation
}

我希望它将状态更新为TaskStatus.Canceled。将其保留在TaskStatus.WaitingForActivation中的理由是什么?

使用CancellationTokenSource取消TaskCompletionSource不会更新Task.Stat

您误解了Wait()

Wait(CancellationToken)允许您取消等待操作
它对基础任务没有影响。