11using System ;
2- using System . Collections . Concurrent ;
32using System . Diagnostics ;
43using System . IO ;
54using System . Linq ;
@@ -19,7 +18,6 @@ public class GraphQLHttpClient : IGraphQLClient
1918 private GraphQLHttpWebSocket GraphQlHttpWebSocket => _lazyHttpWebSocket . Value ;
2019
2120 private readonly CancellationTokenSource _cancellationTokenSource = new CancellationTokenSource ( ) ;
22- private readonly ConcurrentDictionary < Tuple < GraphQLRequest , Type > , object > _subscriptionStreams = new ConcurrentDictionary < Tuple < GraphQLRequest , Type > , object > ( ) ;
2321
2422 private readonly bool _disposeHttpClient = false ;
2523
@@ -85,9 +83,9 @@ public async Task<GraphQLResponse<TResponse>> SendQueryAsync<TResponse>(GraphQLR
8583 if ( Options . UseWebSocketForQueriesAndMutations ||
8684 ! ( Options . WebSocketEndPoint is null ) && Options . EndPoint is null ||
8785 Options . EndPoint . HasWebSocketScheme ( ) )
88- return await GraphQlHttpWebSocket . SendRequest < TResponse > ( request , cancellationToken ) ;
86+ return await GraphQlHttpWebSocket . SendRequest < TResponse > ( request , cancellationToken ) . ConfigureAwait ( false ) ;
8987
90- return await SendHttpRequestAsync < TResponse > ( request , cancellationToken ) ;
88+ return await SendHttpRequestAsync < TResponse > ( request , cancellationToken ) . ConfigureAwait ( false ) ;
9189 }
9290
9391 /// <inheritdoc />
@@ -97,34 +95,15 @@ public Task<GraphQLResponse<TResponse>> SendMutationAsync<TResponse>(GraphQLRequ
9795
9896 /// <inheritdoc />
9997 public IObservable < GraphQLResponse < TResponse > > CreateSubscriptionStream < TResponse > ( GraphQLRequest request )
100- {
101- if ( _disposed )
102- throw new ObjectDisposedException ( nameof ( GraphQLHttpClient ) ) ;
103-
104- var key = new Tuple < GraphQLRequest , Type > ( request , typeof ( TResponse ) ) ;
105-
106- if ( _subscriptionStreams . ContainsKey ( key ) )
107- return ( IObservable < GraphQLResponse < TResponse > > ) _subscriptionStreams [ key ] ;
108-
109- var observable = GraphQlHttpWebSocket . CreateSubscriptionStream < TResponse > ( request ) ;
110-
111- _subscriptionStreams . TryAdd ( key , observable ) ;
112- return observable ;
113- }
98+ => CreateSubscriptionStream < TResponse > ( request , null ) ;
11499
115100 /// <inheritdoc />
116- public IObservable < GraphQLResponse < TResponse > > CreateSubscriptionStream < TResponse > ( GraphQLRequest request , Action < Exception > exceptionHandler )
101+ public IObservable < GraphQLResponse < TResponse > > CreateSubscriptionStream < TResponse > ( GraphQLRequest request , Action < Exception > ? exceptionHandler )
117102 {
118103 if ( _disposed )
119104 throw new ObjectDisposedException ( nameof ( GraphQLHttpClient ) ) ;
120-
121- var key = new Tuple < GraphQLRequest , Type > ( request , typeof ( TResponse ) ) ;
122-
123- if ( _subscriptionStreams . ContainsKey ( key ) )
124- return ( IObservable < GraphQLResponse < TResponse > > ) _subscriptionStreams [ key ] ;
125-
105+
126106 var observable = GraphQlHttpWebSocket . CreateSubscriptionStream < TResponse > ( request , exceptionHandler ) ;
127- _subscriptionStreams . TryAdd ( key , observable ) ;
128107 return observable ;
129108 }
130109
@@ -140,24 +119,24 @@ public IObservable<GraphQLResponse<TResponse>> CreateSubscriptionStream<TRespons
140119
141120 private async Task < GraphQLHttpResponse < TResponse > > SendHttpRequestAsync < TResponse > ( GraphQLRequest request , CancellationToken cancellationToken = default )
142121 {
143- var preprocessedRequest = await Options . PreprocessRequest ( request , this ) ;
122+ var preprocessedRequest = await Options . PreprocessRequest ( request , this ) . ConfigureAwait ( false ) ;
144123
145124 using var httpRequestMessage = preprocessedRequest . ToHttpRequestMessage ( Options , JsonSerializer ) ;
146- using var httpResponseMessage = await HttpClient . SendAsync ( httpRequestMessage , HttpCompletionOption . ResponseHeadersRead , cancellationToken ) ;
125+ using var httpResponseMessage = await HttpClient . SendAsync ( httpRequestMessage , HttpCompletionOption . ResponseHeadersRead , cancellationToken ) . ConfigureAwait ( false ) ;
147126
148- var contentStream = await httpResponseMessage . Content . ReadAsStreamAsync ( ) ;
127+ var contentStream = await httpResponseMessage . Content . ReadAsStreamAsync ( ) . ConfigureAwait ( false ) ;
149128
150129 if ( httpResponseMessage . IsSuccessStatusCode )
151130 {
152- var graphQLResponse = await JsonSerializer . DeserializeFromUtf8StreamAsync < TResponse > ( contentStream , cancellationToken ) ;
131+ var graphQLResponse = await JsonSerializer . DeserializeFromUtf8StreamAsync < TResponse > ( contentStream , cancellationToken ) . ConfigureAwait ( false ) ;
153132 return graphQLResponse . ToGraphQLHttpResponse ( httpResponseMessage . Headers , httpResponseMessage . StatusCode ) ;
154133 }
155134
156135 // error handling
157136 string content = null ;
158137 if ( contentStream != null )
159138 using ( var sr = new StreamReader ( contentStream ) )
160- content = await sr . ReadToEndAsync ( ) ;
139+ content = await sr . ReadToEndAsync ( ) . ConfigureAwait ( false ) ;
161140
162141 throw new GraphQLHttpRequestException ( httpResponseMessage . StatusCode , httpResponseMessage . Headers , content ) ;
163142 }
0 commit comments