皆さんは既に元気にasync/awaitを使いこなされているかとは思いますが、個人的に引っかかったところを備忘録にしておこうと思います。
なお推論コミです。
まずはコードから。
async.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace test
{
class Program
{
static void Main(string[] args)
{
//Main内でasyncする場合はTaskを用意して走らせる必要がある。
var task = Task.Run(async () =>
{
//1.ここでawaitすると同期処理に
var alpha = GetsSum(5);
var bravo = GetsSum(7);
//2.ここでawaitすると非同期処理に
int a = await alpha;
int b = await bravo;
Console.WriteLine($"{a}+{b}={a + b}");
});
Console.ReadLine();
}
//一定時間ごとに値を加算、コンソールに出力する。
static async Task<int> GetsSum(int interval)
{
Console.WriteLine($"task start interval {interval}");
var intTask = Task<int>.Run(() =>
{
var sum = 0;
for (int i = 0; i < 1000/interval; i++)
{
sum += i;
Console.WriteLine($"interval {interval}'s sum : {sum}");
Thread.Sleep(interval);
}
return sum;
});
return await intTask;
}
}
}
単純に加算していくプログラムですが、awaitをかける部分を間違えると同期処理になってしまいます。
1.の部分でかけると同期処理に。2.の部分でかければ非同期処理になりました。
宣言時にawaitをかけると引っかかるのかなーと思った次第でした