Ожидание ClientWebSocket.ReceiveAsync получает только один пакет информации, а затем все остальные ожидания никогда не вC#

Место общения программистов C#
Ответить
Anonymous
 Ожидание ClientWebSocket.ReceiveAsync получает только один пакет информации, а затем все остальные ожидания никогда не в

Сообщение Anonymous »

Я использую класс System.Net.WebSockets.ClientWebSocket на C# в .NET 6.0.
У меня настроен таймер, который неоднократно опрашивает веб-сокет для соединений, показанных здесь. Таймер срабатывает каждые 16 мс.
Когда пакет получен, он десериализует его как JSON и создает событие. Это работает, но делает это только один раз.
Я добавил строки вывода для тестирования:

Код: Выделить всё

Console.WriteLine("Awaiting started")
и

Код: Выделить всё

Console.WriteLine("Awaiting ended")
Ожидание начала должно быть напечатано при опросе веб-сокета. Он должен напечатать «Ожидание завершено» после того, как веб-сокет завершит опрос, а затем, если полученный пакет не пуст, он десериализует его.

Код: Выделить всё

private async void poll(Object? sender, ElapsedEventArgs event_args)
{
switch (web_socket.State)
{
case WebSocketState.Open:
{
if (socket_connected == false)
{
socket_connected = true;
}

try
{
// ReceiveAsync automatically polls and receives the packet.
Memory memory = new Memory(new Byte[1024]);
Console.WriteLine("Awaiting started");
ValueWebSocketReceiveResult result = await web_socket.ReceiveAsync(memory, CancellationToken.None);
Console.WriteLine("Awaiting ended");

// Only attempt deserialization if a packet was received, aka the buffer is not empty.
if (result.Count != 0)
{
deserialize_event(memory.Slice(0, result.Count).ToArray());
}
}
catch (Exception exception)
{
Console.WriteLine("Pusher polling error: " + exception.ToString());
}
}
break;

case WebSocketState.Closed:
{
connection_closed(web_socket.CloseStatus);
}
break;
}
}
Что должно произойти: сначала он должен напечатать сообщение об ожидании, затем дождаться пакета, затем записать содержимое в буфер, затем продолжить выполнение, напечатав, что ожидание завершено.
Что происходит на самом деле:
[img]https://i .sstatic.net/0kKRvZ3C.png[/img]

Похоже, что он получает только один единственный пакет, а затем все вызовы ReceiveAsync никогда не завершаются.

Подробнее здесь: https://stackoverflow.com/questions/786 ... ormation-a
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»