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