Aller au contenu principal

Migration depuis UniTask

Valkarn Tasks est compatible au niveau de l'API avec UniTask dans la plupart des cas courants. Ce guide couvre les différences.

Renommage des types

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

Espace de noms

// Avant
using Cysharp.Threading.Tasks;

// Après
using UnaPartidaMas.Valkarn.Tasks;

Auto-annulation

UniTask nécessite une gestion manuelle de CancellationTokenSource. Valkarn Tasks la génère :

// UniTask (manuel)
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 (généré par la source)
public partial class EnemyAI : MonoBehaviour
{
async ValkarnTask Chase()
{
while (true)
{
Move();
await ValkarnTask.Yield(); // annulé automatiquement à la destruction
}
}
}

Timings PlayerLoop

Valkarn Tasks passe de 10 à 16 timings. Tous les timings UniTask sont directement mappés :

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

Nouveaux dans Valkarn Tasks : PreUpdate, LastPreUpdate, LastPreLateUpdate, PostLateUpdate, TimeUpdate, LastTimeUpdate.

Fire-and-forget

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

// Valkarn Tasks
ValkarnTask.Forget(MyMethod());
// ou décorer la méthode :
[FireAndForget]
async ValkarnTask MyMethod() { ... }

Ce qui est meilleur dans Valkarn Tasks

  • Auto-annulation via générateur de source — pas de code passe-partout
  • 17 règles d'analyseur — détectez les bugs à la compilation
  • Burst / ECS — file d'attente de timers native, systèmes ECS asynchrones
  • 6 timings PlayerLoop supplémentaires
  • Pool conscient des threads — pas d'atomiques sur le thread principal