Every time you await Task, an object is allocated on the heap. In a high-frequency loop, this causes the Garbage Collector to work too hard.
The Fix: Use ValueTask for methods that often complete synchronously. It’s a struct (stored on the stack), resulting in zero allocations for completed results.
High-performance libraries like System.Text.Json use this extensively.
