Roadmap › C# Language — Basics to Advanced › Module: Asynchronous and Parallel Programming
Lessons in this course (38)
36. IEnumerable, yield and async streams
AdvancedMediumLesson 36 of 38
csharp
IEnumerable<int> Evens(int max)
{
for (int i = 0; i <= max; i += 2)
yield return i; // lazy: produced one at a time when iterated
}
async IAsyncEnumerable<Order> ReadOrdersAsync([EnumeratorCancellation] CancellationToken ct = default)
{
await foreach (var row in db.StreamAsync(ct))
yield return Map(row);
}
await foreach (var o in ReadOrdersAsync()) Console.WriteLine(o.Id);Deferred execution: nothing runs until you enumerate (foreach, ToList(), Count()). Enumerating twice runs the work twice.