超时任务 - 但逻辑继续

时间:2018-06-06 11:00:55

标签: c# task

如果我有以下代码:

Task task = Task.Factory.StartNew(() =>
{
    work1();
    work2();
    work3();
    work4();
    ...
}, token);

if (!task.Wait(10 * 1000))
{
    ...timeout
}

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

1 个答案:

答案 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秒内完成,您将停止在任务中执行代码。