環境
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;
}
}
}