.NET Fiddle

CSharp · Console

/Program.cs

using System;
using System.Linq;
using System.Threading.Tasks;
using System.Collections.Generic;

public class Program
{
    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)
        {
            Console.WriteLine(item);
            await Task.Delay(item.StartsWith("A") ? 300 : 50); // Latency
        }

        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}";
                await delayTask; // Latency
            }
        }
    }
}
;