並列プログラミングとPLINQ-タスク並列

6245 ワード

タスク並列
TPLでは、Parallel.Invokeメソッドを使用して複数の非同期タスクをトリガーすることもでき、actionsには複数のメソッドまたは委任が含まれ、parallelOptionsはParallelクラスの操作を構成するために使用されます.public static void Invoke(Action[]actions)public static void Invoke(ParallelOptions parallelOptions,Action[]actions)次の例ではParallet.Invokeを使用して複数のPersonを並列にクエリし、actionsではメソッド、lambda式または依頼をバインドすることができ、バインド方法に注意する際にはvoidの戻り値を持つ無パラメータメソッドでなければならない.
 1     class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             //       
 6             ThreadPool.SetMaxThreads(1000, 1000);
 7             
 8             //    
 9             Parallel.Invoke(option,
10                 PersonMessage, 
11                 ()=>ThreadPoolMessage(GetPersonList()[1]),  
12                 delegate(){
13                     ThreadPoolMessage(GetPersonList()[2]);
14                 });
15             Console.ReadKey();
16         }
17 
18         static void PersonMessage()
19         {
20             ThreadPoolMessage(GetPersonList()[0]);
21         }
22 
23         //       
24         static void ThreadPoolMessage(Person person)
25         {
26             int a, b;
27             ThreadPool.GetAvailableThreads(out a, out b);
28             string message = string.Format("Person  ID:{0} Name:{1} Age:{2}
" + 29 " CurrentThreadId is {3}
WorkerThreads is:{4}
" + 30 " CompletionPortThreads is :{5}
", 31 person.ID, person.Name, person.Age, 32 Thread.CurrentThread.ManagedThreadId, a.ToString(), b.ToString()); 33 34 Console.WriteLine(message); 35 } 36 37 // 38 static IList<Person> GetPersonList() 39 { 40 var personList = new List<Person>(); 41 42 var person1 = new Person(); 43 person1.ID = 1; 44 person1.Name = "Leslie"; 45 person1.Age = 30; 46 personList.Add(person1); 47 .......... 48 return personList; 49 } 50 }