我读过文档说将状态设置为“已取消”需要三个条件:
OperationCanceledException
(或其派生的异常类型,如TaskCanceledException
)被抛出token.IsCancellationRequested
是真的token
传递给的委托与在任务创建时传递的参数OperationCanceledException
相同token
但是下面的示例直接抛出,没有任何 token,但取消成功。是因为 token 是一个结构体,所以默认值总是满足最后两个条件吗?我对这个想法没有信心,如果我错了,希望得到一些解释
var task = Task.Run(() =>
{
throw new OperationCanceledException();
});
try
{
task.Wait();
}
catch (AggregateException)
{
Console.WriteLine(task.Status); // Cancelled
}