並列プログラミングと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の戻り値を持つ無パラメータメソッドでなければならない.
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 }