diff --git a/src/Custom/RealtimeConversation/Internal/AsyncWebsocketMessageEnumerator.cs b/src/Custom/RealtimeConversation/Internal/AsyncWebsocketMessageEnumerator.cs index 906823ff..e89d9a91 100644 --- a/src/Custom/RealtimeConversation/Internal/AsyncWebsocketMessageEnumerator.cs +++ b/src/Custom/RealtimeConversation/Internal/AsyncWebsocketMessageEnumerator.cs @@ -13,7 +13,7 @@ internal partial class AsyncWebsocketMessageResultEnumerator : IAsyncEnumerator< public ClientResult Current { get; private set; } private readonly CancellationToken _cancellationToken; private readonly WebSocket _webSocket; - private readonly byte[] _receiveBuffer; + private byte[] _receiveBuffer; public AsyncWebsocketMessageResultEnumerator(WebSocket webSocket, CancellationToken cancellationToken) { @@ -26,9 +26,12 @@ public AsyncWebsocketMessageResultEnumerator(WebSocket webSocket, CancellationTo public ValueTask DisposeAsync() { - ArrayPool.Shared.Return(_receiveBuffer); + if (Interlocked.Exchange(ref _receiveBuffer, null) is byte[] toReturn) + { + ArrayPool.Shared.Return(toReturn); + } _webSocket?.Dispose(); - return new ValueTask(Task.CompletedTask); + return default; } public async ValueTask MoveNextAsync()