[英]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.