c# - 用于测试多个项目并可能放弃的并行模式

标签 c# linq parallel-processing task-parallel-library

我有一个问题,我认为它很适合并行处理,但我不确定如何在 C# 中准确表达它。通常在这个程序中,我会在几个对象上运行一个昂贵的测试。我正在测试以确保“我可以前进”,所以我需要知道这些测试是否失败。然而,如果任何测试失败,整个事情就会失败,整个功能应该退出。在伪代码中:

...
var guys = getGuysToProcess().ToList();
foreach (myGuys guy in guys) {
    if (!guy.TestForPossibleBadness())
      return false;
}

C# 中的哪种模式最能让我表达这一点并并行测试它们?如果其中任何一个失败,则应终止其他测试,因为它们的结果无关紧要。

最佳答案

既然你提到了 TPL,你也有 PLINQ:

// untested
bool ok = getGuysToProcess().AsParallel().All(g => !g.TestForPossibleBadness());

正如@mquan 指出的那样,这可能不是最有效的。我假设以下可能会更快(但我不是 100% 确定):

// untested
bool ok = ! getGuysToProcess().AsParallel().Any(g => g.TestForPossibleBadness());

关于c# - 用于测试多个项目并可能放弃的并行模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4660323/

相关文章:

c# - 无法使附加到实体的 ODATA v4 操作起作用

c# - Linq "Unable to cast object of type ' System.DateTime' 键入 'System.String'“错误

c# - 并行运行时 IronPDF 死锁

c# - ParallelEnumerable.Range 与 Enumerable.Range.AsParallel 对比?

parallel-processing - 限制Matlab的并行工具箱使用所有内核

c# - Linq Take 通过集合做额外的传递

c# - 获取静态对象上的锁会阻塞其他请求线程吗?

c# - 持久性无知 Linq to SQL

c# - 从 LINQ 填充的 DataGrid 的 SelectedItem 事件中提取数据

c# - Null 合并在 LINQ 查询中不起作用