private ValueTask ShutdownAsync( QUIC_CONNECTION_SHUTDOWN_FLAGS Flags, long ErrorCode) { Debug.Assert(!_state.ShutdownTcs.Task.IsCompleted); // Store the connection into the GCHandle'd state to prevent GC if user calls ShutdownAsync and gets rid of all references to the MsQuicConnection. Debug.Assert(_state.Connection == null); _state.Connection = this; try { MsQuicApi.Api.ConnectionShutdownDelegate( _state.Handle, Flags, ErrorCode); } catch { _state.Connection = null; throw; } return(new ValueTask(_state.ShutdownTcs.Task)); }
private unsafe ValueTask ShutdownAsync( QUIC_CONNECTION_SHUTDOWN_FLAGS Flags, long ErrorCode) { // Store the connection into the GCHandle'd state to prevent GC if user calls ShutdownAsync and gets rid of all references to the MsQuicConnection. Debug.Assert(_state.Connection == null); _state.Connection = this; try { Debug.Assert(!Monitor.IsEntered(_state), "!Monitor.IsEntered(_state)"); MsQuicApi.Api.ApiTable->ConnectionShutdown( _state.Handle.QuicHandle, Flags, (ulong)ErrorCode); } catch { _state.Connection = null; throw; } return(new ValueTask(_state.ShutdownTcs.Task)); }