public static async Task WriteAsync <T>(this IWriteOnlyChannel <T> channel, T item) { var result = await channel.TryWriteAsync(item).ConfigureAwait(false); if (!result) { await channel.Completion.ConfigureAwait(false); throw new OperationCanceledException(); } }
private async Task ListenAsync(IWriteOnlyChannel <ITransportChannel> output, CancellationToken cancellationToken) { while (true) { var result = await _connection.IncomingChannels.TryReadAsync().ConfigureAwait(false); if (!result.HasValue) { break; } var channel = result.Value; _log.Trace("New invocation received: {0}", channel.Id); if (!await output.TryWriteAsync(channel).ConfigureAwait(false)) { channel.Out.TryTerminate(); break; } } }