using System.Collections.Generic; using System.Threading.Tasks; namespace System.Threading.Channels { internal static class ChannelExtensions { public static async Task> ReadAllAsync(this ChannelReader channel) { var list = new List(); while (await channel.WaitToReadAsync()) { while (channel.TryRead(out var item)) { list.Add(item); } } // Manifest any error from channel.Completion (which should be completed now) await channel.Completion; return list; } } }