Closed4

UniTaskへの変換メモ

0y00y0

Task<T> を UniTask<T> に変換

元の型 変換後 使用するメソッド
Task<T> UniTask<T> .AsUniTask()
Task (戻り値なし) UniTask .AsUniTask()
// 例
Task<TextAsset> task = LoadAsync(); // Task<TextAsset> を返す非同期処理
UniTask<TextAsset> uniTask = task.AsUniTask();
0y00y0

Addressables の AsyncOperationHandle<T> を UniTask<T> に変換

元の型 変換後 使用するメソッド
AsyncOperationHandle<T> UniTask<T> handle.Task.AsUniTask()
AsyncOperationHandle UniTask handle.ToUniTask()

方法 1: Task を経由して UniTask<T> に変換

// 例
var handle = Addressables.LoadAssetAsync<TextAsset>("License");
TextAsset textAsset = await handle.Task.AsUniTask(cancellationToken: ct);

方法 2: ToUniTask() を使い、Result を取得

// 例
var handle = Addressables.LoadAssetAsync<TextAsset>("License");
await handle.ToUniTask(cancellationToken: ct);
TextAsset textAsset = handle.Result;
0y00y0

キャンセレーションの適用

元の型 キャンセル適用メソッド
Task<T> .AsUniTask().AttachExternalCancellation(ct)
UniTask<T> .AttachExternalCancellation(ct)
AsyncOperationHandle<T> .Task.AsUniTask(ct)
AsyncOperationHandle .ToUniTask(ct)
IEnumerator .ToUniTask().WithCancellation(ct)

キャンセル適用の例

Task<T> を UniTask<T> に変換し、キャンセレーションを適用

Task<TextAsset> task = LoadAsync();
TextAsset textAsset = await task.AsUniTask().AttachExternalCancellation(ct);

Addressables のロード処理にキャンセレーションを適用

var handle = Addressables.LoadAssetAsync<TextAsset>("License");
TextAsset textAsset = await handle.Task.AsUniTask().AttachExternalCancellation(ct);

IEnumerator を UniTask に変換し、キャンセレーションを適用

IEnumerator MyCoroutine()
{
    yield return new WaitForSeconds(2f);
}

await MyCoroutine().ToUniTask(this.GetCancellationTokenOnDestroy());
0y00y0

まとめ

変換対象 変換メソッド キャンセレーション適用方法
Task<T>UniTask<T> AsUniTask() .AttachExternalCancellation(ct)
AsyncOperationHandle<T>UniTask<T> Task.AsUniTask() .AttachExternalCancellation(ct)
AsyncOperationHandleUniTask ToUniTask() .ToUniTask(cancellationToken: ct)
IEnumeratorUniTask ToUniTask() .WithCancellation(cancellationToken: ct)
このスクラップは2025/02/02にクローズされました