【发布时间】:2013-07-26 14:37:38
【问题描述】:
我正在使用 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();
}
}
}
问候, 斯里拉姆
【问题讨论】:
-
把那部分扔进它自己的方法和
return? -
我的意图是一旦条件满足就退出 ForAll()。我想知道在并行场景中打破循环。
-
顺便说一下,您的示例中没有使用
theFamily字典。此外,您不应尝试在FirstOrDefault之后访问Name而不先检查 null。