private bool TryChangeConnectionState( ClickHouseConnectionState state, ConnectionState newState, ClickHouseTcpClient?client, out ClickHouseConnectionState actualState, [NotNullWhen(true)] out Func <ClickHouseConnection, Exception?>?onStateChanged) { var counter = state.State != ConnectionState.Connecting && newState == ConnectionState.Connecting ? unchecked (state.Counter + 1) : state.Counter; var nextState = new ClickHouseConnectionState(newState, client, state.Settings, counter); if (TryChangeConnectionState(state, nextState, out actualState)) { onStateChanged = CreateConnectionStateChangedCallback(state.State, actualState.State); return(true); } onStateChanged = null; return(false); }
private bool TryChangeConnectionState(ClickHouseConnectionState from, ClickHouseConnectionState to, out ClickHouseConnectionState actualState) { actualState = Interlocked.CompareExchange(ref _connectionState, to, from); if (ReferenceEquals(actualState, from)) { actualState = to; return(true); } return(false); }
/// <summary> /// Initializes a new instance of <see cref="ClickHouseConnection"/> class. /// </summary> public ClickHouseConnection() { _connectionState = new ClickHouseConnectionState(); }