public Task ConnectAsync(Uri uri, CancellationToken cancellationToken) { if (uri == null) { throw new ArgumentNullException("uri"); } if (!uri.IsAbsoluteUri) { throw new ArgumentException(SR.GetString(SR.net_uri_NotAbsolute), "uri"); } if (uri.Scheme != Uri.UriSchemeWs && uri.Scheme != Uri.UriSchemeWss) { throw new ArgumentException(SR.GetString(SR.net_WebSockets_Scheme), "uri"); } // Check that we have not started already int priorState = Interlocked.CompareExchange(ref state, connecting, created); if (priorState == disposed) { throw new ObjectDisposedException(GetType().FullName); } else if (priorState != created) { throw new InvalidOperationException(SR.GetString(SR.net_WebSockets_AlreadyStarted)); } options.SetToReadOnly(); return(ConnectAsyncCore(uri, cancellationToken)); }
public Task ConnectAsync(Uri uri, CancellationToken cancellationToken) { if (uri == null) { throw new ArgumentNullException(nameof(uri)); } if (!uri.IsAbsoluteUri) { throw new ArgumentException(SR.net_uri_NotAbsolute, nameof(uri)); } if (uri.Scheme != UriScheme.Ws && uri.Scheme != UriScheme.Wss) { throw new ArgumentException(SR.net_WebSockets_Scheme, nameof(uri)); } // Check that we have not started already var priorState = (InternalState)Interlocked.CompareExchange(ref _state, (int)InternalState.Connecting, (int)InternalState.Created); if (priorState == InternalState.Disposed) { throw new ObjectDisposedException(GetType().FullName); } else if (priorState != InternalState.Created) { throw new InvalidOperationException(SR.net_WebSockets_AlreadyStarted); } _options.SetToReadOnly(); return(ConnectAsyncCore(uri, cancellationToken)); }