UniTaskを使ってUnityの非同期処理を実装・整理するためのskill
UniTaskの公式思想に沿って、非同期処理をシンプルかつ安全に実装する。
UniTask / UniTask<T> を基本とする。CancellationToken は末尾引数で受け取り、ルートから末端まで必ず伝播する。async void ではなく UniTaskVoid または task.Forget() を使う。OperationCanceledException)と障害(それ以外)を分離して扱う。CancellationToken ベースで制御し、外側から結果を捨てるだけの実装を避ける。CancellationToken を起点にする。FooAsync(..., CancellationToken ct) 形式に統一する。DelayToUniTaskWithCancellationAsyncctUniTask.WhenAll(...)、順次実行は素直に await で連結する。Forget() を許可する。UniTask.CompletedTask / UniTask.FromResult(...) を使う。ct.ThrowIfCancellationRequested() を呼ぶ。CancellationTokenSource.CreateLinkedTokenSource(...) を使う。MonoBehaviour.destroyCancellationToken / Application.exitCancellationToken も選択肢に含める。UniTask は多重awaitできない前提で設計し、使い回しが必要なら別手段(再生成/専用API)を使う。async void を新規追加しない。CancellationToken を受け取るメソッドで、下位呼び出しにトークンを渡し漏らさない。Forget() を乱用しない。完了監視不要の境界用途に限定する。Timeout / TimeoutWithoutException を第一選択にしない(まずはトークン伝播で中断可能にする)。public async UniTask LoadAndShowAsync(CancellationToken ct)
{
ct.ThrowIfCancellationRequested();
var (a, b) = await UniTask.WhenAll(
LoadAAsync(ct),
LoadBAsync(ct));
await ShowAsync(a, b, ct);
}
references/unitask-official-notes.mdreferences/unitask-project-usage.md