【C#】コールバック引数の関数をTask/awaitで待機する

[メモ]関数をTaskで待機する方法

async void Run(Action callback){
 await Task.Delay(3000);
 callback?.Invoke();
}

このようなコールバックを受け付ける関数があったとします。

これを待機するには以下のようにします。

var ts = new TaskCompletionSource<bool>();
Run(() => { ts.SetResult(true); });
await ts.Task;

これでTask/awaitで受け取れるようになります

あわせて読みたい