📝

【Unity】UniTaskのWhenAllは省略して書ける

2023/04/18に公開

概要

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のソースコードより引用
https://github.com/Cysharp/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