From 45187388c238fe42697f3c26f3f2e6264109ce9c Mon Sep 17 00:00:00 2001 From: Brennan Date: Tue, 3 Oct 2023 16:02:51 -0700 Subject: [PATCH 1/2] Dispose CTS in HubConnection streaming --- .../clients/csharp/Client.Core/src/HubConnection.cs | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/SignalR/clients/csharp/Client.Core/src/HubConnection.cs b/src/SignalR/clients/csharp/Client.Core/src/HubConnection.cs index 7e10a4a8da86..d890a3a9500c 100644 --- a/src/SignalR/clients/csharp/Client.Core/src/HubConnection.cs +++ b/src/SignalR/clients/csharp/Client.Core/src/HubConnection.cs @@ -743,7 +743,7 @@ async Task ReadChannelStream() } } - return CommonStreaming(connectionState, streamId, ReadChannelStream); + return CommonStreaming(connectionState, streamId, ReadChannelStream, tokenSource); } // this is called via reflection using the `_sendIAsyncStreamItemsMethod` field @@ -760,11 +760,14 @@ async Task ReadAsyncEnumerableStream() } } - return CommonStreaming(connectionState, streamId, ReadAsyncEnumerableStream); + return CommonStreaming(connectionState, streamId, ReadAsyncEnumerableStream, tokenSource); } - private async Task CommonStreaming(ConnectionState connectionState, string streamId, Func createAndConsumeStream) + private async Task CommonStreaming(ConnectionState connectionState, string streamId, Func createAndConsumeStream, CancellationTokenSource cts) { + // make sure we dispose the CTS created by StreamAsyncCore once streaming completes + using var _ = cts; + Log.StartingStream(_logger, streamId); string? responseError = null; try From 1c9419aaf1014f3132dc9d01a75a3defd13145b2 Mon Sep 17 00:00:00 2001 From: Brennan Date: Thu, 5 Oct 2023 08:59:26 -0700 Subject: [PATCH 2/2] Apply suggestions from code review Co-authored-by: Stephen Halter --- .../clients/csharp/Client.Core/src/HubConnection.cs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/SignalR/clients/csharp/Client.Core/src/HubConnection.cs b/src/SignalR/clients/csharp/Client.Core/src/HubConnection.cs index d890a3a9500c..9720baff993b 100644 --- a/src/SignalR/clients/csharp/Client.Core/src/HubConnection.cs +++ b/src/SignalR/clients/csharp/Client.Core/src/HubConnection.cs @@ -743,7 +743,7 @@ async Task ReadChannelStream() } } - return CommonStreaming(connectionState, streamId, ReadChannelStream, tokenSource); + return CommonStreaming(connectionState, streamId, ReadChannelStream, tokenSource); } // this is called via reflection using the `_sendIAsyncStreamItemsMethod` field @@ -760,13 +760,13 @@ async Task ReadAsyncEnumerableStream() } } - return CommonStreaming(connectionState, streamId, ReadAsyncEnumerableStream, tokenSource); + return CommonStreaming(connectionState, streamId, ReadAsyncEnumerableStream, tokenSource); } - private async Task CommonStreaming(ConnectionState connectionState, string streamId, Func createAndConsumeStream, CancellationTokenSource cts) + private async Task CommonStreaming(ConnectionState connectionState, string streamId, Func createAndConsumeStream, CancellationTokenSource cts) { - // make sure we dispose the CTS created by StreamAsyncCore once streaming completes - using var _ = cts; + // make sure we dispose the CTS created by StreamAsyncCore once streaming completes + using var _ = cts; Log.StartingStream(_logger, streamId); string? responseError = null;