C# 任务的时间安排-但逻辑仍在继续

C# 任务的时间安排-但逻辑仍在继续,c#,task,C#,Task,例如,如果我有以下代码: Task task = Task.Factory.StartNew(() => { work1(); work2(); work3(); work4(); ... }, token); if (!task.Wait(10 * 1000)) { ...timeout } 有没有可能完成这样一种行为:如果我得到一个超时,超时任务中的逻辑也会被取消?例如:如果work1花了11秒才完成,我想确保之后的所有工作都不会执行

例如,如果我有以下代码:

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

您可以只执行,
token.Cancel()如果这是您要求的,则必须是一个傻瓜。您应该避免使用
Task.Factory.StartNew
,而是使用
Task.Run