LoginSignup
36
25

More than 5 years have passed since last update.

async/await を使った非同期ラムダ式を変数に代入する方法

Posted at

async/await を使った非同期ラムダ式を変数に代入したくなった時に
ラムダ式を代入するための変数の型がわからなくなったので、覚書として残しておきます。

引数なし、戻り値なし

async/await を用いた「戻り値なしの非同期関数」は、戻り値が Task で必要があるので、
この時の非同期ラムダ式の型は Func<Task> となります。

using System.Threading.Tasks;

Func<Task> AsyncFunc = async () =>
{
    await Task.Delay(1);
};

引数あり(int)、戻り値なし

引数に int が追加されただけなので、
この場合の非同期ラムダ式の型は Func<int, Task> となります。

using System.Threading.Tasks;

Func<int, Task> AsyncFunc2 = async (int time) =>
{
    await Task.Delay(time);
};

引数なし、戻り値あり(bool)

async/await を用いた「戻り値ありの非同期関数」は、戻り値が Task<【戻り値の型】> で必要があるので、
この場合の非同期ラムダ式の型は Func<Task<bool>> となります。

using System.Threading.Tasks;

Func<Task<bool>> AsyncFunc3 = async () =>
{
    await Task.Delay(1);
    return true;
};

引数あり(int)、戻り値あり(bool)

引数に int が追加されただけなので、
この場合の非同期ラムダ式の型は Func<int, Task<bool>> となります。

using System.Threading.Tasks;

Func<int, Task<bool>> AsyncFunc4 = async (int time) =>
{
    await Task.Delay(time);
    return true;
};
36
25
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
25