Skip to content

Commit 04ae615

Browse files
authored
fix(client): prevent client freeze when calling async from sync methods (#111)
- Added `ConfigureAwait(false)` to `await` calls in async methods to prevent deadlocks.
1 parent b2ab7a8 commit 04ae615

4 files changed

Lines changed: 5 additions & 5 deletions

File tree

APIMatic.Core/ApiCall.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@ public ApiCall<Request, Response, Context, ApiException, ReturnType, ResponseTyp
102102
public async Task<ReturnType> ExecuteAsync(CancellationToken cancellationToken = default)
103103
{
104104
requestBuilder.AcceptHeader = responseHandler.AcceptHeader;
105-
CoreRequest request = await requestBuilder.Build();
105+
CoreRequest request = await requestBuilder.Build().ConfigureAwait(false);
106106
globalConfiguration.ApiCallback?.OnBeforeHttpRequestEventHandler(request);
107107
_sdkLogger.LogRequest(request);
108108
CoreResponse response = await globalConfiguration.HttpClient.ExecuteAsync(request, cancellationToken).ConfigureAwait(false);

APIMatic.Core/Authentication/AuthGroupBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ public override async Task Apply(RequestBuilder requestBuilder)
118118
Validate();
119119
foreach (var authManager in validatedAuthManagers)
120120
{
121-
await authManager.Apply(requestBuilder);
121+
await authManager.Apply(requestBuilder).ConfigureAwait(false);
122122
}
123123
}
124124
}

APIMatic.Core/Http/HttpClientWrapper.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public async Task<CoreResponse> ExecuteAsync(CoreRequest request, CancellationTo
7474
if (_overrideHttpClientConfiguration)
7575
{
7676
responseMessage = await GetCombinedPolicy(request.RetryOption).ExecuteAsync(
77-
async (cancellation) => await ExecuteHttpRequest(request, cancellation).ConfigureAwait(false), cancellationToken)
77+
async (cancellation) => await ExecuteHttpRequest(request, cancellation).ConfigureAwait(false), cancellationToken, false)
7878
.ConfigureAwait(false);
7979
}
8080
else
@@ -286,7 +286,7 @@ private AsyncRetryPolicy<HttpResponseMessage> GetRetryPolicy(RetryOption retryOp
286286
GetServerWaitDuration(result).TotalMilliseconds)),
287287
onRetryAsync: async (result, timespan, retryAttempt, context) =>
288288
{
289-
await Task.CompletedTask;
289+
await Task.CompletedTask.ConfigureAwait(false);
290290
});
291291

292292
private AsyncTimeoutPolicy GetTimeoutPolicy()

APIMatic.Core/Request/RequestBuilder.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ public async Task<CoreRequest> Build()
150150
{
151151
parameters.Validate().Apply(this);
152152
configuration.RuntimeParameters.Validate().Apply(this);
153-
await authGroup.Apply(this);
153+
await authGroup.Apply(this).ConfigureAwait(false);
154154
CoreHelper.AppendUrlWithQueryParameters(QueryUrl, queryParameters, ArraySerialization);
155155
body = bodyParameters.Any() ? bodyParameters : body;
156156
AppendContentTypeHeader();

0 commit comments

Comments
 (0)