如何为已取消的任务添加延续

本文关键字:任务 添加 延续 取消 | 更新日期: 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();