private async Task <IrcMessage> ReceiveAsync(ClientWebSocket client, CancellationToken cancelToken) { // Reset memory stream _memoryStream.Position = 0; _memoryStream.SetLength(0); WebSocketReceiveResult result; do { var buffer = _memoryStream.Buffer.RequestSegment(10 * 1024); result = await client.ReceiveAsync(buffer, cancelToken).ConfigureAwait(false); _memoryStream.Buffer.Advance(result.Count); if (result.CloseStatus != null) { throw new WebSocketClosedException(result.CloseStatus.Value, result.CloseStatusDescription); } }while (!result.EndOfMessage); var payload = IrcParser.Read(_memoryStream.Buffer.AsReadOnlySpan(), Serializer); HandleEvent(payload); ReceivedPayload?.Invoke(payload, _memoryStream.Buffer.Length); return(payload); }