如何为已取消的任务添加延续
本文关键字:任务 添加 延续 取消 | 更新日期: 2023-09-27 18:15:30
我有以下代码
try
{
var cancellationTokenSource = new CancellationTokenSource();
var token = cancellationTokenSource.Token;
var task = Task.Run(() =>
{
while (token.IsCancellationRequested == false)
{
Console.Write("*");
Thread.Sleep(1000);
}
}, token).ContinueWith((t) =>
{
Console.WriteLine("You have canceled the task");
}, TaskContinuationOptions.OnlyOnCanceled);
Console.WriteLine("Press enter to stop the task");
Console.ReadLine();
cancellationTokenSource.Cancel();
task.Wait();
}
catch (AggregateException e)
{
Console.WriteLine($"Got an exception => {e.InnerExceptions[0].Message}");
}
在这种情况下,当我取消任务时,它总是抛出错误,并且延续任务没有被执行。
但是当我从continueWith参数中删除TaskContinuationOptions.OnlyOnCanceled
时,则继续任务正在执行。
我正在跟踪的书具有参数TaskContinuationOptions.OnlyOnCanceled
的代码。
行为是正确的还是这里有什么问题?
我是新的线程。
您的第一个任务实际上并没有被取消-您正在观察已经请求取消,但然后您让第一个任务正常完成…这意味着你的"仅限取消"任务被取消了。如果您将代码更改为:
while (token.IsCancellationRequested == false)
{
Console.Write("*");
Thread.Sleep(1000);
}
token.ThrowIfCancellationRequested();
…