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
。