我正在使用 List.AsParallel().ForAll() PLINQ 实现。在循环内部,如果我发现某个条件成功,我希望循环立即脱离 ForAll() 循环。我怎样才能实现它?
这是示例代码。
using System;
using System.Collections.Generic;
using System.Linq;
namespace Basics
{
class Program
{
class Family
{
public int SNo { get; set; }
public string Name { get; set; }
}
static List<Family> families = null;
static Program()
{
families = new List<Family>()
{
new Family(){SNo = 10, Name="Richard"},
new Family(){SNo = 33, Name="Xio Fung"},
new Family(){SNo = 10, Name="Sean"},
new Family(){SNo = 10, Name="Andrea"},
new Family(){SNo = 20, Name="Bjorn"},
new Family(){SNo = 20, Name="Isabella"},
new Family(){SNo = 35, Name="Michael"},
new Family(){SNo = 35, Name="Marie"}
};
}
private static void Main()
{
Dictionary<int, List<Family>> theFamily = new Dictionary<int, List<Family>>();
var groupedFamilies = families.GroupBy(family => family.SNo);
groupedFamilies.AsParallel().ForAll(groupedFamily =>
{
int groupedFamilyCount = groupedFamily.Count();
if (groupedFamilyCount == 1)
{
Console.WriteLine(groupedFamily.FirstOrDefault().Name);
// break; <-- I want to break if I find the count = 1
}
});
Console.ReadLine();
}
}
Run Code Online (Sandbox Code Playgroud)
}
问候, 斯里拉姆
我相信Parallel.ForEach会起作用:
Parallel.ForEach(groupedFamilies.AsParallel(), (groupedFamily, loopState) =>
{
int groupedFamilyCount = groupedFamily.Count();
if (groupedFamilyCount == 1)
{
Console.WriteLine(groupedFamily.FirstOrDefault().Name);
loopState.Stop(); // break if I find the count = 1
}
});
Run Code Online (Sandbox Code Playgroud)
根据您的用例,您可能需要loopState.Break改为。用于Stop()类似 Any 的操作,Break()用于类似 First 的操作。
Microsoft 关于.NET 4 并行编程的文章中有一篇关于该主题的好文章,名为“何时使用 Parallel For Each Or PLINQ?”
| 归档时间: |
|
| 查看次数: |
3646 次 |
| 最近记录: |