超时任务 - 但逻辑仍在继续

  • 本文关键字:继续 任务 超时 c# task
  • 更新时间 :
  • 英文 :


如果我有以下代码:

Task task = Task.Factory.StartNew(() =>
{
work1();
work2();
work3();
work4();
...
}, token);
if (!task.Wait(10 * 1000))
{
...timeout
}

是否有可能完成一种行为,如果我超时,超时任务中的逻辑也会被取消? 例如:如果work1花了 11 秒然后完成,我想确保之后的所有工作都不会被执行。

您可以在每次方法调用之前插入ThrowIfCancellationRequested()

Task task = Task.Factory.StartNew(() =>
{
token.ThrowIfCancellationRequested();
work1();
token.ThrowIfCancellationRequested();
work2();
token.ThrowIfCancellationRequested();
work3();
token.ThrowIfCancellationRequested();
work4();
...
}, token);
if (!task.Wait(TimeSpan.FromSeconds(10))
{
tokenSource.Cancel();
// handle cancel case
} else {
// handle done case
}

这样,如果这项工作未在 10 秒内完成,您将停止执行任务中的代码。

最新更新