Task<>,async,awaitをどこに付ければ良いのか、、慣れないと書き方に戸惑うので備忘…
非同期処理を引数とするメソッドを作成する
ある処理を外部から引数で渡したい場合、下記のようにActionやFunc<T>を使用するが、
同期処理を引数とするメソッドの定義
TResult Sample<TResult>(Func<int, TResult> func)
{
//todo 前処理
var result = func(100);
//todo 後処理
return result;
}
この引数funcを非同期にしたい場合は下記のようにする。
非同期処理を引数とするメソッドの定義
async Task<TResult> SampleAsync<TResult>(Func<int, Task<TResult>> func)
{
//todo 前処理
var result = await func(100);
//todo 後処理
return result;
}
非同期処理を引数とするメソッドを呼び出す
async Task<int> CallAsync()
{
return await SampleAsync(async num =>
{
return await Task.FromResult(num * 2); //todo 非同期処理
});
}