public virtual async Task CloseAsync() { if (!Open) { throw new MessageStreamCloseException("MessageStream already closed."); } Logger?.LogInformation("Closing message stream."); closeCts.Cancel(); try { await duplexMessageStream.CloseAsync().ConfigureAwait(false); } catch (Exception ex) { Logger?.LogError(ex, "Error message stream."); throw new MessageStreamOpenException("Error closing duplex message stream", ex); } finally { Cleanup(); Open = false; Logger?.LogInformation("Closed message stream."); } }
Task IDuplexMessageStream.CloseAsync() { return(wrapped.CloseAsync()); }