環境
VisualStudio Pro 2017
.NET Framework 4.7.2
コンソールアプリケーション
参考にしたサイト
コード
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net; using System.Threading; namespace _20190925_AsyncTest { class Program { static void Main(string[] args) { Program program = new Program(); int[] intTemp = new int[5]; // ===== ここから 通常の同期処理 ===== for (int i = 0; i < 5; i++) { intTemp[i] = program.Calculate(); Console.WriteLine("同期処理 : {0}", i); } for (int i = 0; i < 5; i++) { Console.WriteLine("{0}がCalculate()の結果です。", intTemp[i]); } Console.WriteLine("エンターキーを入力して下さい。"); Console.ReadLine(); // ===== ここまで 通常の同期処理 ===== // ===== ここから 非同期処理(この場合並列処理かも) ===== Task<int>[] tasks = new Task<int>[5]; for (int i = 0; i < 5; i++) { tasks[i] = program.CalculateAsync(); Console.WriteLine("非同期処理 : {0}", i); // ここにtasks[i].Resultと書かれた文があると同期処理と同じになる。 } for (int i = 0; i < 5; i++) { Console.WriteLine("{0}がCalculateAsync()の結果です。", tasks[i].Result); } Console.WriteLine("エンターキーを入力して下さい。"); Console.ReadLine(); // ===== ここまで 非同期処理(この場合並列処理かも) ===== } int Calculate() { // このメソッドは4秒かかる処理。 int total = 0; for (int i = 0; i <= 100; i++) { total += i; Thread.Sleep(40); } return total; } private async Task<int> CalculateAsync() { // Calculate()メソッドを非同期に実行するためのメソッド。 var task = Task.Run(new Func<int>(this.Calculate)); var result = await task; return result; } } }