diff --git a/src/Providers.Core/Extensions/ClientWebSocketExtensions.cs b/src/Providers.Core/Extensions/ClientWebSocketExtensions.cs index be7aefaac0..922def3122 100644 --- a/src/Providers.Core/Extensions/ClientWebSocketExtensions.cs +++ b/src/Providers.Core/Extensions/ClientWebSocketExtensions.cs @@ -13,20 +13,23 @@ public static async Task> ReceiveAsync(this ClientWebSocket cl try { - while (true) + ValueWebSocketReceiveResult result; + + do { ct.ThrowIfCancellationRequested(); if (read == bytes.Memory.Length) bytes = bytes.Double(); - var result = await client.ReceiveAsync(bytes.Memory[read..], ct); + result = await client.ReceiveAsync(bytes.Memory[read..], ct); - read += result.Count; + if (result.MessageType == WebSocketMessageType.Close) + throw new ObjectDisposedException(client.GetType().Name); - if (result.EndOfMessage) - break; + read += result.Count; } + while (!result.EndOfMessage); return bytes[..read]; }