Skip to content

Commit 2fcfc08

Browse files
committed
upgrade test dependencies, implement ConfigureAwait(false) in libs
1 parent 8cbe46e commit 2fcfc08

File tree

22 files changed

+70
-697
lines changed

22 files changed

+70
-697
lines changed

.editorconfig

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,3 +254,6 @@ dotnet_naming_style.end_in_async_style.required_suffix = Async
254254

255255
# dotnet_naming_rule.<namingRuleTitle>.severity = <value>
256256
dotnet_naming_rule.async_methods_end_in_async.severity = warning
257+
258+
# ReSharper: Configure await
259+
configure_await_analysis_mode = library

GraphQL.Client.sln

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ VisualStudioVersion = 16.0.28407.52
55
MinimumVisualStudioVersion = 10.0.40219.1
66
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{47C98B55-08F1-4428-863E-2C5C876DEEFE}"
77
ProjectSection(SolutionItems) = preProject
8+
src\.editorconfig = src\.editorconfig
89
src\src.props = src\src.props
910
EndProjectSection
1011
EndProject
@@ -14,6 +15,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution
1415
.gitignore = .gitignore
1516
dotnet-tools.json = dotnet-tools.json
1617
LICENSE.txt = LICENSE.txt
18+
examples\GraphQL.Client.Example\Program.cs = examples\GraphQL.Client.Example\Program.cs
1719
README.md = README.md
1820
root.props = root.props
1921
EndProjectSection
@@ -65,6 +67,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "examples", "examples", "{89
6567
EndProject
6668
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "GraphQL.Client.Example", "examples\GraphQL.Client.Example\GraphQL.Client.Example.csproj", "{6B13B87D-1EF4-485F-BC5D-891E2F4DA6CD}"
6769
EndProject
70+
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{98D4DDDD-DE15-4997-B888-9BC806C7416C}"
71+
EndProject
6872
Global
6973
GlobalSection(SolutionConfigurationPlatforms) = preSolution
7074
Debug|Any CPU = Debug|Any CPU
@@ -133,6 +137,7 @@ Global
133137
EndGlobalSection
134138
GlobalSection(NestedProjects) = preSolution
135139
{E95A1258-F666-4D4E-9101-E0C46F6A3CB3} = {0B0EDB0F-FF67-4B78-A8DB-B5C23E1FEE8C}
140+
{05CAF9B2-981E-40C0-AE31-5FA56E351F12} = {98D4DDDD-DE15-4997-B888-9BC806C7416C}
136141
{87FC440E-6A4D-47D8-9EB2-416FC31CC4A6} = {47C98B55-08F1-4428-863E-2C5C876DEEFE}
137142
{C212983F-67DB-44EB-BFB0-5DA75A86DF55} = {0B0EDB0F-FF67-4B78-A8DB-B5C23E1FEE8C}
138143
{92107DF5-73DF-4371-8EB1-6734FED704AD} = {0B0EDB0F-FF67-4B78-A8DB-B5C23E1FEE8C}
@@ -146,6 +151,7 @@ Global
146151
{0D307BAD-27AE-4A5D-8764-4AA2620B01E9} = {0B0EDB0F-FF67-4B78-A8DB-B5C23E1FEE8C}
147152
{7FFFEC00-D751-4FFC-9FD4-E91858F9A1C5} = {47C98B55-08F1-4428-863E-2C5C876DEEFE}
148153
{6B13B87D-1EF4-485F-BC5D-891E2F4DA6CD} = {89AD33AB-64F6-4F82-822F-21DF7A10CEC0}
154+
{98D4DDDD-DE15-4997-B888-9BC806C7416C} = {63F75859-4698-4EDE-8B70-4ACBB8BC425A}
149155
EndGlobalSection
150156
GlobalSection(ExtensibilityGlobals) = postSolution
151157
SolutionGuid = {387AC1AC-F90C-4EF8-955A-04D495C75AF4}

examples/.editorconfig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Configure await
2+
configure_await_analysis_mode = disabled

src/GraphQL.Client.LocalExecution/GraphQLLocalExecutionClient.cs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,12 @@ public IObservable<GraphQLResponse<TResponse>> CreateSubscriptionStream<TRespons
7676

7777
private async Task<GraphQLResponse<TResponse>> ExecuteQueryAsync<TResponse>(GraphQLRequest request, CancellationToken cancellationToken)
7878
{
79-
var executionResult = await ExecuteAsync(request, cancellationToken);
80-
return await ExecutionResultToGraphQLResponseAsync<TResponse>(executionResult, cancellationToken);
79+
var executionResult = await ExecuteAsync(request, cancellationToken).ConfigureAwait(false);
80+
return await ExecutionResultToGraphQLResponseAsync<TResponse>(executionResult, cancellationToken).ConfigureAwait(false);
8181
}
8282
private async Task<IObservable<GraphQLResponse<TResponse>>> ExecuteSubscriptionAsync<TResponse>(GraphQLRequest request, CancellationToken cancellationToken = default)
8383
{
84-
var result = await ExecuteAsync(request, cancellationToken);
84+
var result = await ExecuteAsync(request, cancellationToken).ConfigureAwait(false);
8585
var stream = ((SubscriptionExecutionResult)result).Streams?.Values.SingleOrDefault();
8686

8787
return stream == null
@@ -106,17 +106,17 @@ private async Task<ExecutionResult> ExecuteAsync(GraphQLRequest request, Cancell
106106
options.Query = deserializedRequest?.Query;
107107
options.Inputs = inputs;
108108
options.CancellationToken = cancellationToken;
109-
});
109+
}).ConfigureAwait(false);
110110

111111
return result;
112112
}
113113

114114
private async Task<GraphQLResponse<TResponse>> ExecutionResultToGraphQLResponseAsync<TResponse>(ExecutionResult executionResult, CancellationToken cancellationToken = default)
115115
{
116116
using var stream = new MemoryStream();
117-
await _documentWriter.WriteAsync(stream, executionResult, cancellationToken);
117+
await _documentWriter.WriteAsync(stream, executionResult, cancellationToken).ConfigureAwait(false);
118118
stream.Seek(0, SeekOrigin.Begin);
119-
return await Serializer.DeserializeFromUtf8StreamAsync<TResponse>(stream, cancellationToken);
119+
return await Serializer.DeserializeFromUtf8StreamAsync<TResponse>(stream, cancellationToken).ConfigureAwait(false);
120120
}
121121

122122
#endregion

src/GraphQL.Client/GraphQLHttpClient.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,9 +85,9 @@ public async Task<GraphQLResponse<TResponse>> SendQueryAsync<TResponse>(GraphQLR
8585
if (Options.UseWebSocketForQueriesAndMutations ||
8686
!(Options.WebSocketEndPoint is null) && Options.EndPoint is null ||
8787
Options.EndPoint.HasWebSocketScheme())
88-
return await GraphQlHttpWebSocket.SendRequest<TResponse>(request, cancellationToken);
88+
return await GraphQlHttpWebSocket.SendRequest<TResponse>(request, cancellationToken).ConfigureAwait(false);
8989

90-
return await SendHttpRequestAsync<TResponse>(request, cancellationToken);
90+
return await SendHttpRequestAsync<TResponse>(request, cancellationToken).ConfigureAwait(false);
9191
}
9292

9393
/// <inheritdoc />
@@ -140,24 +140,24 @@ public IObservable<GraphQLResponse<TResponse>> CreateSubscriptionStream<TRespons
140140

141141
private async Task<GraphQLHttpResponse<TResponse>> SendHttpRequestAsync<TResponse>(GraphQLRequest request, CancellationToken cancellationToken = default)
142142
{
143-
var preprocessedRequest = await Options.PreprocessRequest(request, this);
143+
var preprocessedRequest = await Options.PreprocessRequest(request, this).ConfigureAwait(false);
144144

145145
using var httpRequestMessage = preprocessedRequest.ToHttpRequestMessage(Options, JsonSerializer);
146-
using var httpResponseMessage = await HttpClient.SendAsync(httpRequestMessage, HttpCompletionOption.ResponseHeadersRead, cancellationToken);
146+
using var httpResponseMessage = await HttpClient.SendAsync(httpRequestMessage, HttpCompletionOption.ResponseHeadersRead, cancellationToken).ConfigureAwait(false);
147147

148-
var contentStream = await httpResponseMessage.Content.ReadAsStreamAsync();
148+
var contentStream = await httpResponseMessage.Content.ReadAsStreamAsync().ConfigureAwait(false);
149149

150150
if (httpResponseMessage.IsSuccessStatusCode)
151151
{
152-
var graphQLResponse = await JsonSerializer.DeserializeFromUtf8StreamAsync<TResponse>(contentStream, cancellationToken);
152+
var graphQLResponse = await JsonSerializer.DeserializeFromUtf8StreamAsync<TResponse>(contentStream, cancellationToken).ConfigureAwait(false);
153153
return graphQLResponse.ToGraphQLHttpResponse(httpResponseMessage.Headers, httpResponseMessage.StatusCode);
154154
}
155155

156156
// error handling
157157
string content = null;
158158
if (contentStream != null)
159159
using (var sr = new StreamReader(contentStream))
160-
content = await sr.ReadToEndAsync();
160+
content = await sr.ReadToEndAsync().ConfigureAwait(false);
161161

162162
throw new GraphQLHttpRequestException(httpResponseMessage.StatusCode, httpResponseMessage.Headers, content);
163163
}

src/GraphQL.Client/Websocket/GraphQLHttpWebSocket.cs

Lines changed: 22 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public IObservable<GraphQLResponse<TResponse>> CreateSubscriptionStream<TRespons
9999
Observable.Create<GraphQLResponse<TResponse>>(async observer =>
100100
{
101101
Debug.WriteLine($"Create observable thread id: {Thread.CurrentThread.ManagedThreadId}");
102-
var preprocessedRequest = await _client.Options.PreprocessRequest(request, _client);
102+
var preprocessedRequest = await _client.Options.PreprocessRequest(request, _client).ConfigureAwait(false);
103103

104104
var startRequest = new GraphQLWebSocketRequest
105105
{
@@ -157,7 +157,7 @@ public IObservable<GraphQLResponse<TResponse>> CreateSubscriptionStream<TRespons
157157
try
158158
{
159159
// initialize websocket (completes immediately if socket is already open)
160-
await InitializeWebSocket();
160+
await InitializeWebSocket().ConfigureAwait(false);
161161
}
162162
catch (Exception e)
163163
{
@@ -176,7 +176,7 @@ public IObservable<GraphQLResponse<TResponse>> CreateSubscriptionStream<TRespons
176176
try
177177
{
178178
Debug.WriteLine($"sending stop message on subscription {startRequest.Id}");
179-
await QueueWebSocketRequest(stopRequest);
179+
await QueueWebSocketRequest(stopRequest).ConfigureAwait(false);
180180
}
181181
// do not break on disposing
182182
catch (OperationCanceledException) { }
@@ -187,7 +187,7 @@ public IObservable<GraphQLResponse<TResponse>> CreateSubscriptionStream<TRespons
187187
// send subscription request
188188
try
189189
{
190-
await QueueWebSocketRequest(startRequest);
190+
await QueueWebSocketRequest(startRequest).ConfigureAwait(false);
191191
}
192192
catch (Exception e)
193193
{
@@ -266,7 +266,7 @@ public IObservable<GraphQLResponse<TResponse>> CreateSubscriptionStream<TRespons
266266
public Task<GraphQLResponse<TResponse>> SendRequest<TResponse>(GraphQLRequest request, CancellationToken cancellationToken = default) =>
267267
Observable.Create<GraphQLResponse<TResponse>>(async observer =>
268268
{
269-
var preprocessedRequest = await _client.Options.PreprocessRequest(request, _client);
269+
var preprocessedRequest = await _client.Options.PreprocessRequest(request, _client).ConfigureAwait(false);
270270
var websocketRequest = new GraphQLWebSocketRequest
271271
{
272272
Id = Guid.NewGuid().ToString("N"),
@@ -288,7 +288,7 @@ public Task<GraphQLResponse<TResponse>> SendRequest<TResponse>(GraphQLRequest re
288288
try
289289
{
290290
// initialize websocket (completes immediately if socket is already open)
291-
await InitializeWebSocket();
291+
await InitializeWebSocket().ConfigureAwait(false);
292292
}
293293
catch (Exception e)
294294
{
@@ -304,7 +304,7 @@ public Task<GraphQLResponse<TResponse>> SendRequest<TResponse>(GraphQLRequest re
304304
// send request
305305
try
306306
{
307-
await QueueWebSocketRequest(websocketRequest);
307+
await QueueWebSocketRequest(websocketRequest).ConfigureAwait(false);
308308
}
309309
catch (Exception e)
310310
{
@@ -336,8 +336,8 @@ private async Task<Unit> SendWebSocketRequestAsync(GraphQLWebSocketRequest reque
336336
return Unit.Default;
337337
}
338338

339-
await InitializeWebSocket();
340-
await SendWebSocketMessageAsync(request, _internalCancellationToken);
339+
await InitializeWebSocket().ConfigureAwait(false);
340+
await SendWebSocketMessageAsync(request, _internalCancellationToken).ConfigureAwait(false);
341341
request.SendCompleted();
342342
}
343343
catch (Exception e)
@@ -354,7 +354,7 @@ await _clientWebSocket.SendAsync(
354354
new ArraySegment<byte>(requestBytes),
355355
WebSocketMessageType.Text,
356356
true,
357-
cancellationToken);
357+
cancellationToken).ConfigureAwait(false);
358358
}
359359

360360
#endregion
@@ -440,13 +440,13 @@ private async Task ConnectAsync(CancellationToken token)
440440
{
441441
try
442442
{
443-
await BackOff();
443+
await BackOff().ConfigureAwait(false);
444444
_stateSubject.OnNext(GraphQLWebsocketConnectionState.Connecting);
445445
Debug.WriteLine($"opening websocket {_clientWebSocket.GetHashCode()} (thread {Thread.CurrentThread.ManagedThreadId})");
446-
await _clientWebSocket.ConnectAsync(_webSocketUri, token);
446+
await _clientWebSocket.ConnectAsync(_webSocketUri, token).ConfigureAwait(false);
447447
_stateSubject.OnNext(GraphQLWebsocketConnectionState.Connected);
448448
Debug.WriteLine($"connection established on websocket {_clientWebSocket.GetHashCode()}, invoking Options.OnWebsocketConnected()");
449-
await (Options.OnWebsocketConnected?.Invoke(_client) ?? Task.CompletedTask);
449+
await (Options.OnWebsocketConnected?.Invoke(_client) ?? Task.CompletedTask).ConfigureAwait(false);
450450
Debug.WriteLine($"invoking Options.OnWebsocketConnected() on websocket {_clientWebSocket.GetHashCode()}");
451451
_connectionAttempt = 1;
452452

@@ -496,8 +496,8 @@ private async Task ConnectAsync(CancellationToken token)
496496

497497
// send connection init
498498
Debug.WriteLine($"sending connection init message");
499-
await SendWebSocketMessageAsync(initRequest);
500-
var response = await ackTask;
499+
await SendWebSocketMessageAsync(initRequest).ConfigureAwait(false);
500+
var response = await ackTask.ConfigureAwait(false);
501501

502502
if (response.Type == GraphQLWebSocketMessageType.GQL_CONNECTION_ACK)
503503
Debug.WriteLine($"connection acknowledged: {Encoding.UTF8.GetString(response.MessageBytes)}");
@@ -537,7 +537,7 @@ private IObservable<WebsocketMessageWrapper> GetMessageStream() =>
537537
Observable.Create<WebsocketMessageWrapper>(async observer =>
538538
{
539539
// make sure the websocket is connected
540-
await InitializeWebSocket();
540+
await InitializeWebSocket().ConfigureAwait(false);
541541
// subscribe observer to message stream
542542
var subscription = new CompositeDisposable(_incomingMessages
543543
.Subscribe(observer))
@@ -591,7 +591,7 @@ private async Task<WebsocketMessageWrapper> ReceiveWebsocketMessagesAsync()
591591
do
592592
{
593593
// cancellation is done implicitly via the close method
594-
webSocketReceiveResult = await _clientWebSocket.ReceiveAsync(_buffer, CancellationToken.None);
594+
webSocketReceiveResult = await _clientWebSocket.ReceiveAsync(_buffer, CancellationToken.None).ConfigureAwait(false);
595595
ms.Write(_buffer.Array, _buffer.Offset, webSocketReceiveResult.Count);
596596
}
597597
while (!webSocketReceiveResult.EndOfMessage && !_internalCancellationToken.IsCancellationRequested);
@@ -602,13 +602,13 @@ private async Task<WebsocketMessageWrapper> ReceiveWebsocketMessagesAsync()
602602
switch (webSocketReceiveResult.MessageType)
603603
{
604604
case WebSocketMessageType.Text:
605-
var response = await _client.JsonSerializer.DeserializeToWebsocketResponseWrapperAsync(ms);
605+
var response = await _client.JsonSerializer.DeserializeToWebsocketResponseWrapperAsync(ms).ConfigureAwait(false);
606606
response.MessageBytes = ms.ToArray();
607607
Debug.WriteLine($"{response.MessageBytes.Length} bytes received for id {response.Id} on websocket {_clientWebSocket.GetHashCode()} (thread {Thread.CurrentThread.ManagedThreadId})...");
608608
return response;
609609

610610
case WebSocketMessageType.Close:
611-
var closeResponse = await _client.JsonSerializer.DeserializeToWebsocketResponseWrapperAsync(ms);
611+
var closeResponse = await _client.JsonSerializer.DeserializeToWebsocketResponseWrapperAsync(ms).ConfigureAwait(false);
612612
closeResponse.MessageBytes = ms.ToArray();
613613
Debug.WriteLine($"Connection closed by the server.");
614614
throw new Exception("Connection closed by the server.");
@@ -640,10 +640,10 @@ private async Task CloseAsync()
640640
}
641641

642642
Debug.WriteLine($"send \"connection_terminate\" message");
643-
await SendWebSocketMessageAsync(new GraphQLWebSocketRequest { Type = GraphQLWebSocketMessageType.GQL_CONNECTION_TERMINATE });
643+
await SendWebSocketMessageAsync(new GraphQLWebSocketRequest { Type = GraphQLWebSocketMessageType.GQL_CONNECTION_TERMINATE }).ConfigureAwait(false);
644644

645645
Debug.WriteLine($"closing websocket {_clientWebSocket.GetHashCode()}");
646-
await _clientWebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None);
646+
await _clientWebSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, "", CancellationToken.None).ConfigureAwait(false);
647647
_stateSubject.OnNext(GraphQLWebsocketConnectionState.Disconnected);
648648
}
649649

@@ -679,7 +679,7 @@ private async Task CompleteAsync()
679679
if (!_internalCancellationTokenSource.IsCancellationRequested)
680680
_internalCancellationTokenSource.Cancel();
681681

682-
await CloseAsync();
682+
await CloseAsync().ConfigureAwait(false);
683683
_requestSubscription?.Dispose();
684684
_clientWebSocket?.Dispose();
685685

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Configure await
2+
configure_await_analysis_mode = disabled

0 commit comments

Comments
 (0)