如果我有以下代码:
Task task = Task.Factory.StartNew(() =>
{
work1();
work2();
work3();
work4();
...
}, token);
if (!task.Wait(10 * 1000))
{
...timeout
}
是否有可能实现一种行为,如果我得到超时,那么时间任务中的逻辑也会被取消?例如:如果work1
花了11秒然后完成,我想确保之后的所有工作都不会被执行。
答案 0 :(得分:0)
您可以在每次方法调用之前插入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秒内完成,您将停止在任务中执行代码。