Back
Syntax
Study
Editor
Mode:
HTML
CSS
JavaScript
PHP
Reset
Run »
HTML / CSS / JS
// Async streams with IAsyncEnumerable<T> and Channels using System.Threading.Channels; // --- Async stream producer --- static async IAsyncEnumerable<int> GenerateNumbersAsync( int count, [System.Runtime.CompilerServices.EnumeratorCancellation] CancellationToken ct = default) { for (int i = 0; i < count; i++) { await Task.Delay(50, ct).ConfigureAwait(false); yield return i * i; } } // Consumer using await foreach await foreach (int square in GenerateNumbersAsync(8).WithCancellation(CancellationToken.None)) Console.Write($"{square} "); Console.WriteLine(); // --- Channels: bounded producer-consumer --- var channel = Channel.CreateBounded<string>(capacity: 5); async Task ProduceAsync(ChannelWriter<string> writer) { for (int i = 0; i < 10; i++) { await writer.WriteAsync($"message-{i}"); await Task.Delay(20); } writer.Complete(); } async Task ConsumeAsync(ChannelReader<string> reader) { await foreach (string msg in reader.ReadAllAsync()) Console.WriteLine($"[Consumer] received: {msg}"); } await Task.WhenAll( ProduceAsync(channel.Writer), ConsumeAsync(channel.Reader));
Result
Open