はんなりと、ゆるやかに

アジャイル、スクラムが好きなITエンジニアが日々から学んだことをアウトプット

UniTaskで複数のタスクが終わるのを待つ

前回からUniTaskについて調べています。
iucstscui.hatenablog.com

今回は複数のタスクが終わるのを待つ「UniTask.WhenAll」について調べてみました。
Unityバージョン:2021.3.6.f1

2つのタスクをそれぞれawaitしてみる

以下のようなコードを書いてみました。

    public async void OnClick()
    {
        tokenSourceR = new CancellationTokenSource();
        tokenSourceL = new CancellationTokenSource();
        await Count(textR, tokenSourceR.Token, 1000);
        await Count(textL, tokenSourceL.Token, 500);
    }

    async UniTask<string> Count(Text text, CancellationToken token, int delayTime)
    {
        for (int i = 1; i <= 10; ++i)
        {
            await UniTask.Delay(delayTime, true, cancellationToken: token);
            text.GetComponent<Text>().text = i.ToString();
        }
        return "";
    }

この場合、右のカウントアップが終わってから左のカウントアップが始まります。

2つのタスクを同時に待つ

awaitの部分をWhenAllに書き換えて、2つのタスクを待つように変更しました。

    public async void OnClick()
    {
        tokenSourceR = new CancellationTokenSource();
        tokenSourceL = new CancellationTokenSource();
        await UniTask.WhenAll(Count(textR, tokenSourceR.Token, 1000), Count(textL, tokenSourceL.Token, 500));
    }


上記と異なりカウントアップが同時に始まり、それぞれの終了を待つように変わりました。

まとめ

UniTask.WhenAllを使うと複数のタスクを一緒に待つことが出来ます。