创建等待循环,直到所有 3 个布尔值都为 true

问题描述 投票:0回答:1

我有一些代码,其中三个任务基本上同时运行。每个任务完成后都会将布尔值从 false 翻转为 true。只有当所有 3 个值都为 true 时,我才希望继续执行。然而,当使用我想出的代码时,它只等待第一个任务完成,然后就脱离 while 循环。 and && 运算符不适合此操作吗?

bool taskOneReady = false;
bool taskTwoReady = false;
bool taskThreeReady = false;
/*When a task finishes, it will flip the boolean value to true, it looks somewhat like this 
//Execution of task one
taskOneReady = true;
*/
while (!taskOneReady && !taskTwoReady && !taskThreeReady)
{
//Wait for a bit (around a second) before trying again
}
//Code to be executed after all three tasks are finished

我知道我在编码方面很糟糕,而且这个错误对你们很多人来说可能是显而易见的,但我会很感激有用的答案/评论。

c#
1个回答
0
投票

回答你的问题:

bool completed1 = false;
bool completed2 = false;
bool completed3 = false;

while (!completed1 || !completed2 || !completed3)
{
    // wait
}

但是,这是解决该问题的一种非常次优且容易出错的方法。

您可以改用 C# 任务功能:

Task task1 = Task.Run(() =>
{
    // do work here
});

Task task2 = Task.Run(() =>
{
    // do work here
});

Task task3 = Task.Run(() =>
{
    // do work here
});

await Task.WhenAll(task1, task2, task3);

这里,task.Run 块中的代码正在单独的线程上运行,因此尽管任务尚未完成,代码仍会继续。

Task.WhenAll() 任务在所有 3 个任务完成后即完成,

await
表示任务完成后将继续执行。

如果您有空闲时间,我建议您阅读一些异步/等待和任务

© www.soinside.com 2019 - 2024. All rights reserved.