我有一些代码,其中三个任务基本上同时运行。每个任务完成后都会将布尔值从 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
我知道我在编码方面很糟糕,而且这个错误对你们很多人来说可能是显而易见的,但我会很感激有用的答案/评论。
回答你的问题:
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
表示任务完成后将继续执行。
如果您有空闲时间,我建议您阅读一些异步/等待和任务