Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
⊗csSpWsCan 507 of 509 menu
◀ ▶

Отмена WebSocket в C#

Ожидание сети прерывают через CancellationToken. Его передают в ConnectAsync и ReceiveAsync. Если токен уже отменён, операция не начнётся и выбросит OperationCanceledException - это штатный способ остановить вызов.

Ниже токен отменяют до подключения к несуществующему локальному порту. Реальное соединение не понадобится: отмена сработает раньше таймаута сети:

using System.Net.WebSockets; using ClientWebSocket client = new(); using CancellationTokenSource cts = new(); cts.Cancel(); try { await client.ConnectAsync(new Uri("ws://127.0.0.1:59999"), cts.Token); } catch (OperationCanceledException) { Console.WriteLine("canceled"); }

Тот же токен работает на ReceiveAsync: если отменить ожидание ответа, чтение прервётся, даже когда соединение уже Open. Ниже токен отменяют сразу после отправки, и чтение не дождётся echo:

using System.Net.WebSockets; using System.Text; using ClientWebSocket client = new(); using CancellationTokenSource link = new(TimeSpan.FromSeconds(8)); await client.ConnectAsync(new Uri("wss://echo.websocket.events"), link.Token); await client.SendAsync(Encoding.UTF8.GetBytes("ping"), WebSocketMessageType.Text, true, CancellationToken.None); using CancellationTokenSource wait = new(); wait.Cancel(); try { byte[] buf = new byte[64]; await client.ReceiveAsync(buf, wait.Token); } catch (OperationCanceledException) { Console.WriteLine("receive canceled"); }

Подключитесь к "ws://127.0.0.1:59991" с уже отменённым ожиданием и выведите "stopped", если вызов прервался.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить