@@ -102,10 +102,9 @@ private Uri ServerUri
102102
103103 public IJsonSerializer JsonSerializer { get ; set ; }
104104
105- public HttpClient HttpClient { get ; set ; }
105+ public Func < IHttpClient > HttpClientProvider { get ; set ; }
106106
107107 public Func < IClientWebSocket > ClientWebSocketProvider { get ; set ; }
108- public Func < IHttpClient > HttpClientAdapterProvider { get ; set ; }
109108
110109 List < IDisposable > _resources = new List < IDisposable > ( ) ;
111110
@@ -170,9 +169,8 @@ private void Initialize()
170169
171170 JsonSerializer = new SystemTextJsonSerializer ( ) ;
172171
173- HttpClient = new HttpClient ( ) ;
172+ HttpClientProvider = ( ) => new DefaultHttpClient ( ) ;
174173 ClientWebSocketProvider = ( ) => new DefaultClientWebSocket ( ) ;
175- HttpClientAdapterProvider = ( ) => new DefaultHttpClient ( ) ;
176174 _expectedExceptions = new List < Type >
177175 {
178176 typeof ( TimeoutException ) ,
@@ -183,6 +181,17 @@ private void Initialize()
183181 } ;
184182 }
185183
184+ private IHttpClient GetHttpClient ( )
185+ {
186+ var http = HttpClientProvider ( ) ;
187+ if ( http is null )
188+ {
189+ throw new ArgumentNullException ( nameof ( HttpClientProvider ) , $ "{ HttpClientProvider } returns a null") ;
190+ }
191+
192+ return http ;
193+ }
194+
186195 private async Task InitTransportAsync ( )
187196 {
188197 Options . Transport = await GetProtocolAsync ( ) ;
@@ -195,13 +204,7 @@ private async Task InitTransportAsync()
195204 } ;
196205 if ( Options . Transport == TransportProtocol . Polling )
197206 {
198- var adapter = HttpClientAdapterProvider ( ) ;
199- if ( adapter is null )
200- {
201- throw new ArgumentNullException ( nameof ( HttpClientAdapterProvider ) , $ "{ HttpClientAdapterProvider } returns a null") ;
202- }
203- _resources . Add ( adapter ) ;
204- var handler = HttpPollingHandler . CreateHandler ( transportOptions . EIO , adapter ) ;
207+ var handler = HttpPollingHandler . CreateHandler ( transportOptions . EIO , GetHttpClient ( ) ) ;
205208 _transport = new HttpTransport ( transportOptions , handler ) ;
206209 }
207210 else
@@ -342,10 +345,13 @@ private async Task<TransportProtocol> GetProtocolAsync()
342345 Uri uri = UriConverter . GetServerUri ( false , ServerUri , Options . EIO , Options . Path , Options . Query ) ;
343346 try
344347 {
345- string text = await HttpClient . GetStringAsync ( uri ) ;
346- if ( text . Contains ( "websocket" ) )
348+ using ( var http = GetHttpClient ( ) )
347349 {
348- return TransportProtocol . WebSocket ;
350+ string text = await http . GetStringAsync ( uri ) ;
351+ if ( text . Contains ( "websocket" ) )
352+ {
353+ return TransportProtocol . WebSocket ;
354+ }
349355 }
350356 }
351357 catch ( Exception e )
@@ -798,7 +804,6 @@ public void AddExpectedException(Type type)
798804
799805 public void Dispose ( )
800806 {
801- HttpClient . Dispose ( ) ;
802807 _transport . TryDispose ( ) ;
803808 _ackHandlers . Clear ( ) ;
804809 _onAnyHandlers . Clear ( ) ;
0 commit comments