📝
【Unity】UniTaskのWhenAllは省略して書ける
概要
UniTaskのWhenAllで配列を指定してawaitするとき、await UniTask.WhenAll(hoge)って書かなくてもawait hogeって書けばいいというメモ
UniTask.WhenAll
通常のWhenAll
var tasks = new List<UniTask>();
await UniTask.WhenAll(tasks);
省略形のWhenAll
var tasks = new List<UniTask>();
await tasks;
内部実装
UniTaskのソースコードより引用
UniTaskExtensions.Shorthand.csより
// shorthand of WhenAll
public static UniTask.Awaiter GetAwaiter(this UniTask[] tasks)
{
return UniTask.WhenAll(tasks).GetAwaiter();
}
public static UniTask.Awaiter GetAwaiter(this IEnumerable<UniTask> tasks)
{
return UniTask.WhenAll(tasks).GetAwaiter();
}
public static UniTask<T[]>.Awaiter GetAwaiter<T>(this UniTask<T>[] tasks)
{
return UniTask.WhenAll(tasks).GetAwaiter();
}
public static UniTask<T[]>.Awaiter GetAwaiter<T>(this IEnumerable<UniTask<T>> tasks)
{
return UniTask.WhenAll(tasks).GetAwaiter();
}
このように内部でGetAwaiterの実装が配列に対して直接用意されており、省略してawaitできる
Discussion