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

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।