ひとつ前の質問は解決したのですが(↓),Taskを待機するときのawaitの有無による動作の違いについて教えてください.
Teratail:C#で並列処理,すべて終わるまで待機
どちらも以下のコードを実行した場合の実行結果は同じ(に見える)のですが,13行目のawaitの有無,foreach内のresultの違いによりどのような違いが生じるのでしょうか.
よろしくお願いします.
コード1
C#
1static void Main() { 2 fuga2(); 3 Console.ReadLine(); 4 } 5 6 static async void fuga2() { 7 Console.WriteLine("fuga start"); 8 9 var tasks = new List<Task<int>>(); 10 tasks.Add(Task.Run(() => Heavy("1"))); 11 tasks.Add(Task.Run(() => Heavy("2"))); 12 13 var result = await Task.WhenAll(tasks.ToArray()); 14 15 foreach (var r in result) { 16 Console.WriteLine(r); 17 } 18 } 19 20 21 static int Heavy(string str) { 22 Console.WriteLine(str + "Start"); 23 for (int i = 0; i < 200000000; i++) ;//重たい処理 24 Console.WriteLine(str + "End"); 25 26 return 5; //ダミーデータ 27 } 28
コード2
C#
1static void Main() { 2 fuga2(); 3 Console.ReadLine(); 4 } 5 6 static async void fuga2() { 7 Console.WriteLine("fuga start"); 8 9 var tasks = new List<Task<int>>(); 10 tasks.Add(Task.Run(() => Heavy("1"))); 11 tasks.Add(Task.Run(() => Heavy("2"))); 12 13 var result = Task.WhenAll(tasks.ToArray()); //←awaitがない 14 15 foreach (var r in result.Result) { //←resultがresult.Resultになっている 16 Console.WriteLine(r); 17 } 18 } 19 20 21 static int Heavy(string str) { 22 Console.WriteLine(str + "Start"); 23 for (int i = 0; i < 200000000; i++) ;//重たい処理 24 Console.WriteLine(str + "End"); 25 26 return 5; //ダミーデータ 27 } 28
fuga start 2Start 1Start //ここで数秒待たされる 2End 1End 5 5
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/02/05 03:43
2019/02/05 04:21