我不明白
CancellationToken
参数是做什么用的?
通过或不通过
CancellationToken
没有任何区别。
public static async void test()
{
var cts = new CancellationTokenSource();
try
{
await f1(cts.Token);
}
catch (Exception e)
{
Console.WriteLine($"f1 {e.Message}");
}
}
private static Task f1(CancellationToken token)
{
TaskCompletionSource tcs = new TaskCompletionSource();
Task.Delay(1000).ContinueWith((t) =>
{
tcs.SetCanceled(token);
}, token);
return tcs.Task;
}
正如 PlanningLlama 所建议的,该参数在观察任务结果时引发的异常上设置
CancellationToken
属性。因此 test
捕获的异常将将该属性设置为传入的取消标记。
我相信
CancellationToken
属性是为了区分不同的取消来源;但是,由于链接的取消令牌,此属性在一般情况下没有用。
旁注:
async void
。CancellationTokenSource
。await
代替 ContinueWith
。