3

我正在使用 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();
    }
}    

}

问候,斯里拉姆

4

1 回答 1

4

我相信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

                }
            });

根据您的用例,您可能需要loopState.Break。用于Stop()Any-like 操作,Break()用于 First-like 操作。

在 Microsoft关于使用 .NET 4 进行并行编程的文章中有一篇很好的文章,名为“When To Use Parallel For Each Or PLINQ?”

于 2013-07-26T14:46:35.970 回答