かずきのBlog@hatena

日本マイクロソフトに勤めています。XAML + C#の組み合わせをメインに、たまにASP.NETやJavaなどの.NET系以外のことも書いています。掲載内容は個人の見解であり、所属する企業を代表するものではありません。

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(() => ....);
});

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