gpt4 book ai didi

c# - 如何检查所有任务是否已正确完成?

转载 作者:太空狗 更新时间:2023-10-29 19:58:34 25 4
gpt4 key购买 nike

我的代码中有以下几行:

    var taskA = Task.Factory.StartNew(WorkA);
var taskB = Task.Factory.StartNew(WorkB);
var allTasks = new[] { taskA, taskB };

Task.Factory.ContinueWhenAll(allTasks, tasks => FinalWork(), TaskContinuationOptions.OnlyOnRanToCompletion);

但是当我运行它时,出现以下错误:

It is invalid to exclude specific continuation kinds for continuations off of multiple tasks.

这是由选项 TaskContinuationOptions.OnlyOnRanToCompletion 引起的。

我的问题是如何检查所有任务是否已正确完成工作(所有任务状态均为RanToCompletion)然后执行FinalWork()?同时,应用程序执行其他任务。

最佳答案

根据@Peter Ritchie 和@Ben McDougall 的回答,我找到了解决方案。我通过删除冗余变量 tasksTaskContinuationOptions.OnlyOnRanToCompletion

修改了我的代码
var taskA = Task.Factory.StartNew(WorkA);
var taskB = Task.Factory.StartNew(WorkB);
var allTasks = new[] { taskA, taskB };
Task.Factory.ContinueWhenAll(allTasks, FinalWork);

FinalWork 是:

private static void FinalWork(Task[] tasks)
{
if (tasks.All(t => t.Status == TaskStatus.RanToCompletion))
{
// do "some work"
}
}

如果所有任务的状态都是RanToCompletion“一些工作”将完成。它会在所有任务完成后立即执行,不会阻塞主任务。如果我取消至少一项任务,则什么也不会发生。

或者你可以这样做,

var taskA = Task.Factory.StartNew(WorkA);
var taskB = Task.Factory.StartNew(WorkB);
var allTasks = new[] { taskA, taskB };
var continuedTask = Task.WhenAll(allTasks).ContinueWith((antecedent) => { /*Do Work*/ }, TaskContinuationOptions.OnlyOnRanToCompletion));

关于c# - 如何检查所有任务是否已正确完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12248832/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com