Start here. This is the direct spoken answer to practice first.
Why this question matters
Async streams are valuable when incremental delivery is part of the contract, but they also extend resource lifetime and expose partial-progress behavior.
IAsyncEnumerable<T> represents values produced asynchronously over time. It is useful when each next item may require asynchronous work and the consumer can process results incrementally instead of waiting for one fully buffered collection. The consumer pulls items with await foreach, so this is asynchronous iteration rather than a task containing a finished list.