如果我有以下代码:
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 秒内完成,您将停止执行任务中的代码。