public static async ValueTask <Maybe <T> > TryReadAsync <T>(this IReadableChannel <T> channel) { var result = await channel.TryReadSafeAsync().ConfigureAwait(false); if (result.HasValue) { return(result); } await channel.Completion.ConfigureAwait(false); return(result); }