Как вызвать ClientWebSocket закрыть

По сути, я хочу, чтобы при запуске этого кода я мог закрыть этот ClientWebSocket

 static void Main(string[] args)
    {
        Thread.Sleep(1000);
        Connect("ws://endpointfrompublicurl").Wait();
        Console.WriteLine("Press any key to exit...");
        Console.ReadKey();
    }

public static async Task Connect(string uri, ClientWebSocket webSocket)
    {
        try
        {
            webSocket = new ClientWebSocket();
            await webSocket.ConnectAsync(new Uri(uri), CancellationToken.None);
            await Task.WhenAll(Receive(webSocket), Send(webSocket));
        }
        catch (Exception ex)
        {
            Console.WriteLine("Exception: {0}", ex);
        }
        finally
        {
            if (webSocket != null)
                webSocket.Dispose();
            Console.WriteLine();

            lock (consoleLock)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine("WebSocket closed.");
                Console.ResetColor();
            }
        }
    }

private static async Task Receive(ClientWebSocket webSocket)
    {
        byte[] buffer = new byte[receiveChunkSize];
        while (webSocket.State == WebSocketState.Open)
        {
            var result = await webSocket.ReceiveAsync(new ArraySegment<byte>(buffer), CancellationToken.None);
            if (result.MessageType == WebSocketMessageType.Close)
            {
                await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, CancellationToken.None);
            }
            else
            {
                LogStatus(true, buffer, result.Count);
            }
        }
    }

Есть ли лучшая практика или, возможно, другой подход для возможности закрыть текущее открытое соединение в websocket

0 ответов

Другие вопросы по тегам