【发布时间】:2021-08-11 22:06:43
【问题描述】:
在我的 C# 控制台应用程序中,我尝试运行多个同时执行各种数据检查的任务。 如果其中一项任务返回 true,我应该停止其他任务,因为我有可操作的结果。也很有可能没有一个函数返回 true
我有代码可以一起运行这些任务(我想),但我无法到达终点线:
Task task1 = Task.Run(() => Task1(stoppingToken));
Task task2 = Task.Run(() => Task2(stoppingToken));
Task task3 = Task.Run(() => Task3(stoppingToken));
Task task4 = Task.Run(() => Task4(stoppingToken));
Task task5 = Task.Run(() => Task5(stoppingToken));
Task task6 = Task.Run(() => Task6(stoppingToken));
Task.WaitAll(task1, task2, task3, task4, task5, task6);
这与已知所需结果(超时值)的链接问题中的答案略有不同。我正在等待这些任务中的任何一个可能返回 true,然后如果它们仍在运行则取消剩余的任务
Task.WhenAny with cancellation of the non completed tasks and timeout
【问题讨论】:
-
您可以尝试在循环中调用 Task.WhenAny 并继续循环直到 WhenAny 返回 true。之后,您可以在链接的答案中取消。
-
循环对我不起作用。也许我应该改写这个问题,因为这听起来像是一项必须是真实的任务。很可能所有任务都返回 false,然后我什么也不做。如果任何一个函数返回 true,则意味着我需要标记数据/将其放在一边
-
如果您检查循环中是否所有任务都已完成,循环可能仍然有效
-
也许通过 Task.WhenAll。只是不要等待它,而是检查它是否已完成。
-
如果所有任务都完成并且没有一个返回 true,应该采取什么行动?
标签: c# .net .net-core task-parallel-library