private static bool IsHttpsWebSocketConnectivityAvailable(Uri baseAddress, out Exception exception) { NetworkDetector.ConnectivityStatus connectivityStatu; exception = null; while (true) { NetworkDetector.ConnectivityStatus connectivityStatu1 = (NetworkDetector.ConnectivityStatus)Interlocked.CompareExchange(ref NetworkDetector.httpsWebSocketConnectivityStatus, 1, 0); switch (connectivityStatu1) { case NetworkDetector.ConnectivityStatus.Unknown: { connectivityStatu = NetworkDetector.CheckHttpsWebSocketConnectivity(baseAddress, out exception); NetworkDetector.ConnectivityStatus connectivityStatu2 = (NetworkDetector.ConnectivityStatus)Interlocked.CompareExchange(ref NetworkDetector.httpsWebSocketConnectivityStatus, (int)connectivityStatu, 1); if (connectivityStatu2 == NetworkDetector.ConnectivityStatus.Testing) { return(connectivityStatu == NetworkDetector.ConnectivityStatus.Available); } if (connectivityStatu2 == NetworkDetector.ConnectivityStatus.Unknown) { continue; } if (connectivityStatu == connectivityStatu2) { return(connectivityStatu == NetworkDetector.ConnectivityStatus.Available); } NetworkDetector.httpsWebSocketConnectivityStatus = 0; continue; } case NetworkDetector.ConnectivityStatus.Testing: { Thread.Sleep(5); continue; } case NetworkDetector.ConnectivityStatus.Available: case NetworkDetector.ConnectivityStatus.Unavailable: { return(connectivityStatu1 == NetworkDetector.ConnectivityStatus.Available); } default: { goto case NetworkDetector.ConnectivityStatus.Unknown; } } } return(connectivityStatu == NetworkDetector.ConnectivityStatus.Available); }