繁体   English   中英

如果其中的另一个任务被取消,则任务不会完成

[英]Task does not complete if another task with in it gets cancelled

在此代码中,如果我取消令牌,任务t将永远不会完成(永远不会输出到控制台),即使令牌不用于t并且仅用于t内的任务

CancellationTokenSource source = new CancellationTokenSource();
CancellationToken token = source.Token;

Task t = Task.Factory.StartNew(async () =>
{
    await Task.Delay(1000, token);
    Console.WriteLine("Task Completed");
});

source.Cancel();

如何取消令牌但也让任务完成

笔记:
我尝试改用Task.Run ,​​并得到相同的输出
t.IsCompleted将无限期保持错误(任务永远不会完成)
延迟任务完成

您可以通过处理和抑制由Task.Delay引发的OperationCanceledException来使t在取消中存活:

Task t = Task.Run(async () =>
{
    try { await Task.Delay(1000, token); } catch (OperationCanceledException) { }
    Console.WriteLine("Task Completed");
});

暂无
暂无

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

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