namespace Microshaoft { using System; using System.Linq; using System.Threading.Tasks; using System.Threading; using System.Collections.Generic; using System.Collections.Concurrent; class Program { static void Main(string[] args) { var list = new List<Employee>() { new Employee() { ID = 100 , Name = "Bill Gates" , Department = "Microsoft" } , new Employee() { ID = 2 , Name = "Steve Jobs" , Department = "Apple" } , new Employee() { ID = 300 , Name = "Larry Page" , Department = "Google" } , new Employee() { ID = 4 , Name = "Sergey Brin" , Department = "Google" } , new Employee() { ID = 300 , Name = "Larry Page2" , Department = "Google" } , new Employee() { ID = 4 , Name = "Microshaoft" , Department = "Microsoft" } }; var groups = list.ToLookup<Employee,string> ( x => { return x.Department; } ); groups.AsParallel().WithDegreeOfParallelism ( groups.Count ).ForAll ( (x) => { Console.WriteLine("{0},{1}", Thread.CurrentThread.ManagedThreadId, x.Key); var orderedGroup = x.OrderByDescending<Employee, int> ( (xx) => { return xx.ID; } ); //orderedGroup.AsParallel().WithDegreeOfParallelism(1).ForAll // ( // (xxx) => // { // Console.WriteLine("{0},{1}", Thread.CurrentThread.ManagedThreadId, xxx.Name); // } // ); orderedGroup.ToList().ForEach ( (xxx) => { Console.WriteLine("{0},{1}", Thread.CurrentThread.ManagedThreadId, xxx.Name); } ); } ); Console.ReadLine(); } public class Employee { public int ID { get; set; } public string Name { get; set; } public string Department { get; set; } public string Gender { get; set; } public DateTime Birthday { get; set; } } } } |