かずきのBlog@hatena

すきな言語は C# + XAML の組み合わせ。Azure Functions も好き。最近は Go 言語勉強中。日本マイクロソフトで働いていますが、ここに書いていることは個人的なメモなので会社の公式見解ではありません。

async await覚書

// 戻り値無しのつきはなし
async void Foo1()
{
  // logic
}

// 戻り値無しのawaitで待機可能なもの
async Task Foo2()
{
  // logic
}

// 戻り値有りのawaitで待機可能なもの
async Task<T> Foo3()
{
  return T型の何か;
}

使う側

// 呼び出し先でawaitされててもかまわないで突っ走る
Foo1();

// Foo2が終わるまで待機
await Foo2();

// Foo3が終わるまで待機、結果を受け取れる
T result = await Foo3();

ここで待機といっているが、処理が止まるわけではなくバックグラウンドで処理が行われて、それが終わると今のスレッドに戻ってきて処理が続くイメージ。ブロックはしない。

便利なことに、デリゲートでも使える。

HogeProcess(async () =>
{
  // 何かしらのTaskを返すメソッド呼び出し
  await Task.Run(() => ....);
});

とりあえず、これくらいを覚えておいておけばコードは読めるかな??厳密なところは信頼と実績の岩永さんのページを。