繁体   English   中英

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

[英]How to add a continuation for cancelled tasks

我有以下代码

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();

......然后它会按照你的预期行事。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM