Closed4
UniTaskへの変換メモ

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

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;

キャンセレーションの適用
元の型 | キャンセル適用メソッド |
---|---|
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());

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