前回から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を使うと複数のタスクを一緒に待つことが出来ます。