using System.Threading.Tasks;
using System.Collections.Generic;
public static async Task Main()
var sequence_A = Produce("A", 200, 1, 2, 3, 4, 5);
var sequence_B = Produce("B", 150, 1, 2, 3, 4, 5);
var sequence_C = Produce("C", 100, 1, 2, 3, 4, 5);
var merged = AsyncEnumerableEx.Merge(sequence_A, sequence_B, sequence_C);
await foreach (var item in merged)
await Task.Delay(item.StartsWith("A") ? 300 : 50);
static async IAsyncEnumerable<string> Produce(string prefix, int delay, params int[] values)
foreach (var value in values)
var delayTask = Task.Delay(delay);
yield return $"{prefix}{value}";