Awaitable型は非同期コードを公開するために使用され、Unityに特化した非同期の戻り値型も提供します。
Awaitableについて
UnityのAwaitableは、非同期コードの戻り値として特にUnity環境に適した型を提供します。これにより、非同期操作の完了まで待機するプロセスを表現でき、非同期メソッドの戻り値として利用されます。 例えば、Awaitable.NextFrameAsync(ct)メソッドは次のフレームまでの待機を非同期で実行し、UniTaskを返します。このUniTaskをawaitにより処理することで、非同期的に次のフレームまでの待機が可能です。
private async Awaitable HogeAsync(CancellationToken ct) { Debug.Log(Time.frameCount); await Awaitable.NextFrameAsync(ct); Debug.Log("待機:" + Time.frameCount); } // 出力結果 1 // Start()が呼び出されたときのフレームカウント 待機:2 // 次のフレームでのフレームカウント
同じことをUniTaskでする場合は次のようなコードになります。
await UniTask.Yield();
その他
WaitForSecondsAsyncは指定秒待機します。
private async Awaitable HogeAsync(CancellationToken ct) { Debug.Log(Time.time); await Awaitable.WaitForSecondsAsync(seconds: 1f, cancellationToken: ct); Debug.Log("待機:" + Time.time); }
キャンセル
CancellationTokenがキャンセルされた場合、OperationCanceledExceptionがスローされます。
private async Awaitable HogeAsync(CancellationToken ct) { try { await Awaitable.WaitForSecondsAsync(seconds: 30f, cancellationToken: ct); } catch (OperationCanceledException) { Debug.Log("キャンセルされました"); } }