ValueTask - Reduces Memory Allocations
ValueTask<T> avoids unnecessary heap allocations compared to Task<T>.
Before (More Allocations)
Returning Task<T> always causes heap allocation, even when returning a cached result.
public async Task<int> GetValueAsync() { return await Task.FromResult(42); // Creates unnecessary Task object }
After (Reduced Allocations with ValueTask<T>)
Using ValueTask<T>, allocations are avoided for completed tasks.
public ValueTask<int> GetValueAsync() { return new ValueTask<int>(42); // No heap allocation }