Pular para o conteúdo principal

Migração do UniTask

O Valkarn Tasks é compatível com a API do UniTask na maioria dos casos comuns. Este guia cobre as diferenças.

Renomeação de tipos

UniTaskValkarn Tasks
UniTaskValkarnTask
UniTask<T>ValkarnTask<T>
UniTaskCompletionSourceValkarnTaskCompletionSource
UniTaskCompletionSource<T>ValkarnTaskCompletionSource<T>

Namespace

// Antes
using Cysharp.Threading.Tasks;

// Depois
using UnaPartidaMas.Valkarn.Tasks;

Cancelamento automático

O UniTask exige gerenciamento manual de CancellationTokenSource. O Valkarn Tasks o gera:

// UniTask (manual)
public class EnemyAI : MonoBehaviour
{
CancellationTokenSource _cts;

void OnEnable() => _cts = new CancellationTokenSource();
void OnDestroy() => _cts.Cancel();

async UniTaskVoid Chase(CancellationToken ct)
{
while (!ct.IsCancellationRequested)
{
Move();
await UniTask.Yield(ct);
}
}
}

// Valkarn Tasks (gerado por código-fonte)
public partial class EnemyAI : MonoBehaviour
{
async ValkarnTask Chase()
{
while (true)
{
Move();
await ValkarnTask.Yield(); // cancela automaticamente ao Destroy
}
}
}

Timings do PlayerLoop

O Valkarn Tasks expande de 10 para 16 timings. Todos os timings do UniTask mapeiam diretamente:

UniTaskValkarn Tasks
PlayerLoopTiming.InitializationPlayerLoopTiming.Initialization
PlayerLoopTiming.LastInitializationPlayerLoopTiming.LastInitialization
PlayerLoopTiming.EarlyUpdatePlayerLoopTiming.EarlyUpdate
PlayerLoopTiming.FixedUpdatePlayerLoopTiming.FixedUpdate
PlayerLoopTiming.UpdatePlayerLoopTiming.Update
PlayerLoopTiming.LastUpdatePlayerLoopTiming.LastUpdate
PlayerLoopTiming.PreLateUpdatePlayerLoopTiming.PreLateUpdate
PlayerLoopTiming.LastPostLateUpdatePlayerLoopTiming.LastPostLateUpdate

Novos no Valkarn Tasks: PreUpdate, LastPreUpdate, LastPreLateUpdate, PostLateUpdate, TimeUpdate, LastTimeUpdate.

Fire-and-forget

// UniTask
UniTask.Void(async () => { ... });

// Valkarn Tasks
ValkarnTask.Forget(MyMethod());
// ou decore o método:
[FireAndForget]
async ValkarnTask MyMethod() { ... }

O que é melhor no Valkarn Tasks

  • Cancelamento automático via gerador de código-fonte — sem boilerplate
  • 17 regras de analisador — detecte bugs em tempo de compilação
  • Burst / ECS — heap de timers nativa, sistemas ECS assíncronos
  • 6 timings extras do PlayerLoop
  • Pool consciente de thread — sem operações atômicas na thread principal