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