Перейти к основному содержимому

Миграция с UniTask

В большинстве распространённых случаев Valkarn Tasks совместим с UniTask на уровне API. В этом руководстве описаны отличия.

Переименование типов

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

Пространство имён

// До
using Cysharp.Threading.Tasks;

// После
using UnaPartidaMas.Valkarn.Tasks;

Авто-отмена

UniTask требует ручного управления CancellationTokenSource. Valkarn Tasks генерирует его автоматически:

// UniTask (вручную)
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 (генерация исходного кода)
public partial class EnemyAI : MonoBehaviour
{
async ValkarnTask Chase()
{
while (true)
{
Move();
await ValkarnTask.Yield(); // автоматически отменяется при Destroy
}
}
}

Фазы PlayerLoop

Valkarn Tasks расширяет количество фаз с 10 до 16. Все фазы UniTask отображаются напрямую:

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

Новые фазы в Valkarn Tasks: PreUpdate, LastPreUpdate, LastPreLateUpdate, PostLateUpdate, TimeUpdate, LastTimeUpdate.

Fire-and-forget

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

// Valkarn Tasks
ValkarnTask.Forget(MyMethod());
// или декорируйте метод:
[FireAndForget]
async ValkarnTask MyMethod() { ... }

Что лучше в Valkarn Tasks

  • Авто-отмена через генератор исходного кода — никакого шаблонного кода
  • 17 правил анализатора — обнаружение ошибок во время компиляции
  • Burst / ECS — нативный таймерный хип, асинхронные ECS-системы
  • 6 дополнительных фаз PlayerLoop
  • Пул с учётом потоков — нет атомарных операций на главном потоке