मुख्य कंटेंट तक स्किप करें

ValkarnTask

ValkarnTask core awaitable type है। यह एक readonly struct है — happy path पर (जब task synchronously या pool के माध्यम से complete होता है) कोई heap allocation नहीं।

namespace UnaPartidaMas.Valkarn.Tasks;

public readonly struct ValkarnTask : IEquatable<ValkarnTask>

Static factory methods

Delay

// Milliseconds (default रूप से PlayerLoopTiming.Update उपयोग करता है)
ValkarnTask ValkarnTask.Delay(int millisecondsDelay)
ValkarnTask ValkarnTask.Delay(int millisecondsDelay, PlayerLoopTiming timing)
ValkarnTask ValkarnTask.Delay(int millisecondsDelay, CancellationToken cancellationToken)
ValkarnTask ValkarnTask.Delay(int millisecondsDelay, PlayerLoopTiming timing, CancellationToken cancellationToken)

// TimeSpan overloads
ValkarnTask ValkarnTask.Delay(TimeSpan delay)
ValkarnTask ValkarnTask.Delay(TimeSpan delay, PlayerLoopTiming timing)
ValkarnTask ValkarnTask.Delay(TimeSpan delay, CancellationToken cancellationToken)

Yield

// अगले frame पर Yield करें (default रूप से Update timing)
ValkarnTask ValkarnTask.Yield()
ValkarnTask ValkarnTask.Yield(PlayerLoopTiming timing)
ValkarnTask ValkarnTask.Yield(CancellationToken cancellationToken)

WhenAll

ValkarnTask ValkarnTask.WhenAll(ValkarnTask task1, ValkarnTask task2)
ValkarnTask ValkarnTask.WhenAll(ValkarnTask task1, ValkarnTask task2, ValkarnTask task3)
// ... 8 parameters तक

// Return values के साथ — tuple destructuring supported
ValkarnTask<(T1, T2)> ValkarnTask.WhenAll<T1, T2>(ValkarnTask<T1>, ValkarnTask<T2>)
ValkarnTask<(T1, T2, T3)> ValkarnTask.WhenAll<T1, T2, T3>(...)
// ... 8 तक

// Collection overloads
ValkarnTask ValkarnTask.WhenAll(IEnumerable<ValkarnTask> tasks)
ValkarnTask<T[]> ValkarnTask.WhenAll<T>(IEnumerable<ValkarnTask<T>> tasks)

WhenAny

ValkarnTask<int> ValkarnTask.WhenAny(ValkarnTask task1, ValkarnTask task2)   // पहले complete का index return करता है
ValkarnTask<T> ValkarnTask.WhenAny<T>(ValkarnTask<T> task1, ValkarnTask<T> task2) // पहले का value return करता है

Thread switching

ValkarnTask ValkarnTask.SwitchToMainThread()
ValkarnTask ValkarnTask.SwitchToThreadPool()
ValkarnTask ValkarnTask.SwitchToSynchronizationContext(SynchronizationContext context)

Completed / Never

ValkarnTask ValkarnTask.CompletedTask      // pre-completed, zero alloc
ValkarnTask<T> ValkarnTask.FromResult<T>(T value)
ValkarnTask ValkarnTask.FromCanceled(CancellationToken ct)
ValkarnTask<T> ValkarnTask.FromCanceled<T>(CancellationToken ct)
ValkarnTask ValkarnTask.FromException(Exception ex)
ValkarnTask<T> ValkarnTask.FromException<T>(Exception ex)
ValkarnTask ValkarnTask.Never // कभी complete नहीं होता

Run

// thread pool पर delegate run करता है
ValkarnTask ValkarnTask.Run(Action action)
ValkarnTask ValkarnTask.Run(Func<ValkarnTask> factory)
ValkarnTask<T> ValkarnTask.Run<T>(Func<T> func)
ValkarnTask<T> ValkarnTask.Run<T>(Func<ValkarnTask<T>> factory)

Forget

// Fire-and-forget: CS4014 warning safely suppress करें
void ValkarnTask.Forget(ValkarnTask task)
void ValkarnTask.Forget(ValkarnTask task, Action<Exception> exceptionHandler)

Instance members

ValkarnTaskStatus Status { get; }
bool IsCompleted { get; }
bool IsCompletedSuccessfully { get; }
bool IsFaulted { get; }
bool IsCanceled { get; }

// Result प्राप्त करें (faulted/canceled होने पर throws)
void GetResult()

// Awaiter
ValkarnTaskAwaiter GetAwaiter()

// ValueTask में convert करें
ValueTask AsValueTask()

Wait conditions

// एक condition true होने तक wait करें
ValkarnTask ValkarnTask.WaitUntil(Func<bool> condition)
ValkarnTask ValkarnTask.WaitUntil(Func<bool> condition, PlayerLoopTiming timing)

// एक condition true होते तक wait करें
ValkarnTask ValkarnTask.WaitWhile(Func<bool> condition)

// एक fixed number of frames के लिए wait करें
ValkarnTask ValkarnTask.WaitForFrames(int frameCount)
ValkarnTask ValkarnTask.NextFrame()

Pool diagnostics

// प्रति pool (Type type, int currentSize, int maxSize) return करता है
IEnumerable<(Type, int, int)> ValkarnTask.GetPoolInfo()

Window → Valkarn Tasks → Task Tracker window में available।