Compare commits

...

2 Commits

Author SHA1 Message Date
William Cheng
88ce2cb070 Merge branch 'master-fix#19176' of https://github.com/filipe-silva/openapi-generator into filipe-silva-master-fix#19176b 2024-08-04 18:07:36 +08:00
filipe
2fd7c41b3d #19176 fix Task.Result directly blocks thread
- async should never be blocked on the ApiClient
 To fix we invert the logic and use Task as base and keep consistency, we expect and wait result only on synchronous calls.
2024-07-20 11:01:58 +01:00
12 changed files with 208 additions and 268 deletions

View File

@ -449,10 +449,9 @@ namespace {{packageName}}.Client
/// <param name="configuration">A per-request configuration object.
/// It is assumed that any merge with GlobalConfiguration has been done before calling this method.</param>
/// <returns>A new ApiResponse instance.</returns>
private ApiResponse<T> ExecClient<T>(Func<RestClient, RestResponse<T>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
private async Task<ApiResponse<T>> ExecClientAsync<T>(Func<RestClient, Task<RestResponse<T>>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
{
var baseUrl = configuration.GetOperationServerUrl(options.Operation, options.OperationIndex) ?? _baseUrl;
var clientOptions = new RestClientOptions(baseUrl)
{
ClientCertificates = configuration.ClientCertificates,
@ -486,7 +485,7 @@ namespace {{packageName}}.Client
{
InterceptRequest(request);
RestResponse<T> response = getResponse(client);
RestResponse<T> response = await getResponse(client);
// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
@ -582,21 +581,21 @@ namespace {{packageName}}.Client
clientOptions.CookieContainer = cookies;
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
Func<RestClient, Task<RestResponse<T>>> getResponse = (client) =>
{
if (RetryConfiguration.RetryPolicy != null)
{
var policy = RetryConfiguration.RetryPolicy;
var policyResult = policy.ExecuteAndCapture(() => client.Execute(request));
return DeserializeRestResponseFromPolicy<T>(client, request, policyResult);
return Task.FromResult(DeserializeRestResponseFromPolicy<T>(client, request, policyResult));
}
else
{
return client.Execute<T>(request);
return Task.FromResult(client.Execute<T>(request));
}
};
return ExecClient(getResponse, setOptions, request, options, configuration);
return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult();
}
{{#supportsAsync}}
@ -607,9 +606,7 @@ namespace {{packageName}}.Client
//no extra options
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
{
Func<Task<RestResponse<T>>> action = async () =>
Func<RestClient, Task<RestResponse<T>>> getResponse = async (client) =>
{
{{#supportsRetry}}
if (RetryConfiguration.AsyncRetryPolicy != null)
@ -626,10 +623,8 @@ namespace {{packageName}}.Client
}
{{/supportsRetry}}
};
return action().Result;
};
return Task.FromResult<ApiResponse<T>>(ExecClient(getResponse, setOptions, request, options, configuration));
return ExecClientAsync(getResponse, setOptions, request, options, configuration);
}
#region IAsynchronousClient

View File

@ -449,10 +449,9 @@ namespace Org.OpenAPITools.Client
/// <param name="configuration">A per-request configuration object.
/// It is assumed that any merge with GlobalConfiguration has been done before calling this method.</param>
/// <returns>A new ApiResponse instance.</returns>
private ApiResponse<T> ExecClient<T>(Func<RestClient, RestResponse<T>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
private async Task<ApiResponse<T>> ExecClientAsync<T>(Func<RestClient, Task<RestResponse<T>>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
{
var baseUrl = configuration.GetOperationServerUrl(options.Operation, options.OperationIndex) ?? _baseUrl;
var clientOptions = new RestClientOptions(baseUrl)
{
ClientCertificates = configuration.ClientCertificates,
@ -469,7 +468,7 @@ namespace Org.OpenAPITools.Client
{
InterceptRequest(request);
RestResponse<T> response = getResponse(client);
RestResponse<T> response = await getResponse(client);
// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
@ -565,21 +564,21 @@ namespace Org.OpenAPITools.Client
clientOptions.CookieContainer = cookies;
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
Func<RestClient, Task<RestResponse<T>>> getResponse = (client) =>
{
if (RetryConfiguration.RetryPolicy != null)
{
var policy = RetryConfiguration.RetryPolicy;
var policyResult = policy.ExecuteAndCapture(() => client.Execute(request));
return DeserializeRestResponseFromPolicy<T>(client, request, policyResult);
return Task.FromResult(DeserializeRestResponseFromPolicy<T>(client, request, policyResult));
}
else
{
return client.Execute<T>(request);
return Task.FromResult(client.Execute<T>(request));
}
};
return ExecClient(getResponse, setOptions, request, options, configuration);
return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult();
}
private Task<ApiResponse<T>> ExecAsync<T>(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken))
@ -589,9 +588,7 @@ namespace Org.OpenAPITools.Client
//no extra options
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
{
Func<Task<RestResponse<T>>> action = async () =>
Func<RestClient, Task<RestResponse<T>>> getResponse = async (client) =>
{
if (RetryConfiguration.AsyncRetryPolicy != null)
{
@ -604,10 +601,8 @@ namespace Org.OpenAPITools.Client
return await client.ExecuteAsync<T>(request, cancellationToken).ConfigureAwait(false);
}
};
return action().Result;
};
return Task.FromResult<ApiResponse<T>>(ExecClient(getResponse, setOptions, request, options, configuration));
return ExecClientAsync(getResponse, setOptions, request, options, configuration);
}
#region IAsynchronousClient

View File

@ -449,10 +449,9 @@ namespace Org.OpenAPITools.Client
/// <param name="configuration">A per-request configuration object.
/// It is assumed that any merge with GlobalConfiguration has been done before calling this method.</param>
/// <returns>A new ApiResponse instance.</returns>
private ApiResponse<T> ExecClient<T>(Func<RestClient, RestResponse<T>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
private async Task<ApiResponse<T>> ExecClientAsync<T>(Func<RestClient, Task<RestResponse<T>>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
{
var baseUrl = configuration.GetOperationServerUrl(options.Operation, options.OperationIndex) ?? _baseUrl;
var clientOptions = new RestClientOptions(baseUrl)
{
ClientCertificates = configuration.ClientCertificates,
@ -469,7 +468,7 @@ namespace Org.OpenAPITools.Client
{
InterceptRequest(request);
RestResponse<T> response = getResponse(client);
RestResponse<T> response = await getResponse(client);
// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
@ -565,21 +564,21 @@ namespace Org.OpenAPITools.Client
clientOptions.CookieContainer = cookies;
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
Func<RestClient, Task<RestResponse<T>>> getResponse = (client) =>
{
if (RetryConfiguration.RetryPolicy != null)
{
var policy = RetryConfiguration.RetryPolicy;
var policyResult = policy.ExecuteAndCapture(() => client.Execute(request));
return DeserializeRestResponseFromPolicy<T>(client, request, policyResult);
return Task.FromResult(DeserializeRestResponseFromPolicy<T>(client, request, policyResult));
}
else
{
return client.Execute<T>(request);
return Task.FromResult(client.Execute<T>(request));
}
};
return ExecClient(getResponse, setOptions, request, options, configuration);
return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult();
}
private Task<ApiResponse<T>> ExecAsync<T>(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken))
@ -589,9 +588,7 @@ namespace Org.OpenAPITools.Client
//no extra options
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
{
Func<Task<RestResponse<T>>> action = async () =>
Func<RestClient, Task<RestResponse<T>>> getResponse = async (client) =>
{
if (RetryConfiguration.AsyncRetryPolicy != null)
{
@ -604,10 +601,8 @@ namespace Org.OpenAPITools.Client
return await client.ExecuteAsync<T>(request, cancellationToken).ConfigureAwait(false);
}
};
return action().Result;
};
return Task.FromResult<ApiResponse<T>>(ExecClient(getResponse, setOptions, request, options, configuration));
return ExecClientAsync(getResponse, setOptions, request, options, configuration);
}
#region IAsynchronousClient

View File

@ -450,10 +450,9 @@ namespace Org.OpenAPITools.Client
/// <param name="configuration">A per-request configuration object.
/// It is assumed that any merge with GlobalConfiguration has been done before calling this method.</param>
/// <returns>A new ApiResponse instance.</returns>
private ApiResponse<T> ExecClient<T>(Func<RestClient, RestResponse<T>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
private async Task<ApiResponse<T>> ExecClientAsync<T>(Func<RestClient, Task<RestResponse<T>>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
{
var baseUrl = configuration.GetOperationServerUrl(options.Operation, options.OperationIndex) ?? _baseUrl;
var clientOptions = new RestClientOptions(baseUrl)
{
ClientCertificates = configuration.ClientCertificates,
@ -485,7 +484,7 @@ namespace Org.OpenAPITools.Client
{
InterceptRequest(request);
RestResponse<T> response = getResponse(client);
RestResponse<T> response = await getResponse(client);
// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
@ -581,21 +580,21 @@ namespace Org.OpenAPITools.Client
clientOptions.CookieContainer = cookies;
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
Func<RestClient, Task<RestResponse<T>>> getResponse = (client) =>
{
if (RetryConfiguration.RetryPolicy != null)
{
var policy = RetryConfiguration.RetryPolicy;
var policyResult = policy.ExecuteAndCapture(() => client.Execute(request));
return DeserializeRestResponseFromPolicy<T>(client, request, policyResult);
return Task.FromResult(DeserializeRestResponseFromPolicy<T>(client, request, policyResult));
}
else
{
return client.Execute<T>(request);
return Task.FromResult(client.Execute<T>(request));
}
};
return ExecClient(getResponse, setOptions, request, options, configuration);
return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult();
}
private Task<ApiResponse<T>> ExecAsync<T>(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken))
@ -605,9 +604,7 @@ namespace Org.OpenAPITools.Client
//no extra options
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
{
Func<Task<RestResponse<T>>> action = async () =>
Func<RestClient, Task<RestResponse<T>>> getResponse = async (client) =>
{
if (RetryConfiguration.AsyncRetryPolicy != null)
{
@ -620,10 +617,8 @@ namespace Org.OpenAPITools.Client
return await client.ExecuteAsync<T>(request, cancellationToken).ConfigureAwait(false);
}
};
return action().Result;
};
return Task.FromResult<ApiResponse<T>>(ExecClient(getResponse, setOptions, request, options, configuration));
return ExecClientAsync(getResponse, setOptions, request, options, configuration);
}
#region IAsynchronousClient

View File

@ -450,10 +450,9 @@ namespace Org.OpenAPITools.Client
/// <param name="configuration">A per-request configuration object.
/// It is assumed that any merge with GlobalConfiguration has been done before calling this method.</param>
/// <returns>A new ApiResponse instance.</returns>
private ApiResponse<T> ExecClient<T>(Func<RestClient, RestResponse<T>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
private async Task<ApiResponse<T>> ExecClientAsync<T>(Func<RestClient, Task<RestResponse<T>>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
{
var baseUrl = configuration.GetOperationServerUrl(options.Operation, options.OperationIndex) ?? _baseUrl;
var clientOptions = new RestClientOptions(baseUrl)
{
ClientCertificates = configuration.ClientCertificates,
@ -485,7 +484,7 @@ namespace Org.OpenAPITools.Client
{
InterceptRequest(request);
RestResponse<T> response = getResponse(client);
RestResponse<T> response = await getResponse(client);
// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
@ -581,21 +580,21 @@ namespace Org.OpenAPITools.Client
clientOptions.CookieContainer = cookies;
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
Func<RestClient, Task<RestResponse<T>>> getResponse = (client) =>
{
if (RetryConfiguration.RetryPolicy != null)
{
var policy = RetryConfiguration.RetryPolicy;
var policyResult = policy.ExecuteAndCapture(() => client.Execute(request));
return DeserializeRestResponseFromPolicy<T>(client, request, policyResult);
return Task.FromResult(DeserializeRestResponseFromPolicy<T>(client, request, policyResult));
}
else
{
return client.Execute<T>(request);
return Task.FromResult(client.Execute<T>(request));
}
};
return ExecClient(getResponse, setOptions, request, options, configuration);
return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult();
}
private Task<ApiResponse<T>> ExecAsync<T>(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken))
@ -605,9 +604,7 @@ namespace Org.OpenAPITools.Client
//no extra options
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
{
Func<Task<RestResponse<T>>> action = async () =>
Func<RestClient, Task<RestResponse<T>>> getResponse = async (client) =>
{
if (RetryConfiguration.AsyncRetryPolicy != null)
{
@ -620,10 +617,8 @@ namespace Org.OpenAPITools.Client
return await client.ExecuteAsync<T>(request, cancellationToken).ConfigureAwait(false);
}
};
return action().Result;
};
return Task.FromResult<ApiResponse<T>>(ExecClient(getResponse, setOptions, request, options, configuration));
return ExecClientAsync(getResponse, setOptions, request, options, configuration);
}
#region IAsynchronousClient

View File

@ -450,10 +450,9 @@ namespace Org.OpenAPITools.Client
/// <param name="configuration">A per-request configuration object.
/// It is assumed that any merge with GlobalConfiguration has been done before calling this method.</param>
/// <returns>A new ApiResponse instance.</returns>
private ApiResponse<T> ExecClient<T>(Func<RestClient, RestResponse<T>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
private async Task<ApiResponse<T>> ExecClientAsync<T>(Func<RestClient, Task<RestResponse<T>>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
{
var baseUrl = configuration.GetOperationServerUrl(options.Operation, options.OperationIndex) ?? _baseUrl;
var clientOptions = new RestClientOptions(baseUrl)
{
ClientCertificates = configuration.ClientCertificates,
@ -485,7 +484,7 @@ namespace Org.OpenAPITools.Client
{
InterceptRequest(request);
RestResponse<T> response = getResponse(client);
RestResponse<T> response = await getResponse(client);
// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
@ -581,21 +580,21 @@ namespace Org.OpenAPITools.Client
clientOptions.CookieContainer = cookies;
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
Func<RestClient, Task<RestResponse<T>>> getResponse = (client) =>
{
if (RetryConfiguration.RetryPolicy != null)
{
var policy = RetryConfiguration.RetryPolicy;
var policyResult = policy.ExecuteAndCapture(() => client.Execute(request));
return DeserializeRestResponseFromPolicy<T>(client, request, policyResult);
return Task.FromResult(DeserializeRestResponseFromPolicy<T>(client, request, policyResult));
}
else
{
return client.Execute<T>(request);
return Task.FromResult(client.Execute<T>(request));
}
};
return ExecClient(getResponse, setOptions, request, options, configuration);
return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult();
}
private Task<ApiResponse<T>> ExecAsync<T>(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken))
@ -605,9 +604,7 @@ namespace Org.OpenAPITools.Client
//no extra options
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
{
Func<Task<RestResponse<T>>> action = async () =>
Func<RestClient, Task<RestResponse<T>>> getResponse = async (client) =>
{
if (RetryConfiguration.AsyncRetryPolicy != null)
{
@ -620,10 +617,8 @@ namespace Org.OpenAPITools.Client
return await client.ExecuteAsync<T>(request, cancellationToken).ConfigureAwait(false);
}
};
return action().Result;
};
return Task.FromResult<ApiResponse<T>>(ExecClient(getResponse, setOptions, request, options, configuration));
return ExecClientAsync(getResponse, setOptions, request, options, configuration);
}
#region IAsynchronousClient

View File

@ -448,10 +448,9 @@ namespace Org.OpenAPITools.Client
/// <param name="configuration">A per-request configuration object.
/// It is assumed that any merge with GlobalConfiguration has been done before calling this method.</param>
/// <returns>A new ApiResponse instance.</returns>
private ApiResponse<T> ExecClient<T>(Func<RestClient, RestResponse<T>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
private async Task<ApiResponse<T>> ExecClientAsync<T>(Func<RestClient, Task<RestResponse<T>>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
{
var baseUrl = configuration.GetOperationServerUrl(options.Operation, options.OperationIndex) ?? _baseUrl;
var clientOptions = new RestClientOptions(baseUrl)
{
ClientCertificates = configuration.ClientCertificates,
@ -468,7 +467,7 @@ namespace Org.OpenAPITools.Client
{
InterceptRequest(request);
RestResponse<T> response = getResponse(client);
RestResponse<T> response = await getResponse(client);
// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
@ -564,21 +563,21 @@ namespace Org.OpenAPITools.Client
clientOptions.CookieContainer = cookies;
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
Func<RestClient, Task<RestResponse<T>>> getResponse = (client) =>
{
if (RetryConfiguration.RetryPolicy != null)
{
var policy = RetryConfiguration.RetryPolicy;
var policyResult = policy.ExecuteAndCapture(() => client.Execute(request));
return DeserializeRestResponseFromPolicy<T>(client, request, policyResult);
return Task.FromResult(DeserializeRestResponseFromPolicy<T>(client, request, policyResult));
}
else
{
return client.Execute<T>(request);
return Task.FromResult(client.Execute<T>(request));
}
};
return ExecClient(getResponse, setOptions, request, options, configuration);
return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult();
}
private Task<ApiResponse<T>> ExecAsync<T>(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken))
@ -588,9 +587,7 @@ namespace Org.OpenAPITools.Client
//no extra options
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
{
Func<Task<RestResponse<T>>> action = async () =>
Func<RestClient, Task<RestResponse<T>>> getResponse = async (client) =>
{
if (RetryConfiguration.AsyncRetryPolicy != null)
{
@ -603,10 +600,8 @@ namespace Org.OpenAPITools.Client
return await client.ExecuteAsync<T>(request, cancellationToken).ConfigureAwait(false);
}
};
return action().Result;
};
return Task.FromResult<ApiResponse<T>>(ExecClient(getResponse, setOptions, request, options, configuration));
return ExecClientAsync(getResponse, setOptions, request, options, configuration);
}
#region IAsynchronousClient

View File

@ -449,10 +449,9 @@ namespace Org.OpenAPITools.Client
/// <param name="configuration">A per-request configuration object.
/// It is assumed that any merge with GlobalConfiguration has been done before calling this method.</param>
/// <returns>A new ApiResponse instance.</returns>
private ApiResponse<T> ExecClient<T>(Func<RestClient, RestResponse<T>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
private async Task<ApiResponse<T>> ExecClientAsync<T>(Func<RestClient, Task<RestResponse<T>>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
{
var baseUrl = configuration.GetOperationServerUrl(options.Operation, options.OperationIndex) ?? _baseUrl;
var clientOptions = new RestClientOptions(baseUrl)
{
ClientCertificates = configuration.ClientCertificates,
@ -484,7 +483,7 @@ namespace Org.OpenAPITools.Client
{
InterceptRequest(request);
RestResponse<T> response = getResponse(client);
RestResponse<T> response = await getResponse(client);
// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
@ -580,21 +579,21 @@ namespace Org.OpenAPITools.Client
clientOptions.CookieContainer = cookies;
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
Func<RestClient, Task<RestResponse<T>>> getResponse = (client) =>
{
if (RetryConfiguration.RetryPolicy != null)
{
var policy = RetryConfiguration.RetryPolicy;
var policyResult = policy.ExecuteAndCapture(() => client.Execute(request));
return DeserializeRestResponseFromPolicy<T>(client, request, policyResult);
return Task.FromResult(DeserializeRestResponseFromPolicy<T>(client, request, policyResult));
}
else
{
return client.Execute<T>(request);
return Task.FromResult(client.Execute<T>(request));
}
};
return ExecClient(getResponse, setOptions, request, options, configuration);
return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult();
}
private Task<ApiResponse<T>> ExecAsync<T>(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken))
@ -604,9 +603,7 @@ namespace Org.OpenAPITools.Client
//no extra options
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
{
Func<Task<RestResponse<T>>> action = async () =>
Func<RestClient, Task<RestResponse<T>>> getResponse = async (client) =>
{
if (RetryConfiguration.AsyncRetryPolicy != null)
{
@ -619,10 +616,8 @@ namespace Org.OpenAPITools.Client
return await client.ExecuteAsync<T>(request, cancellationToken).ConfigureAwait(false);
}
};
return action().Result;
};
return Task.FromResult<ApiResponse<T>>(ExecClient(getResponse, setOptions, request, options, configuration));
return ExecClientAsync(getResponse, setOptions, request, options, configuration);
}
#region IAsynchronousClient

View File

@ -449,10 +449,9 @@ namespace Org.OpenAPITools.Client
/// <param name="configuration">A per-request configuration object.
/// It is assumed that any merge with GlobalConfiguration has been done before calling this method.</param>
/// <returns>A new ApiResponse instance.</returns>
private ApiResponse<T> ExecClient<T>(Func<RestClient, RestResponse<T>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
private async Task<ApiResponse<T>> ExecClientAsync<T>(Func<RestClient, Task<RestResponse<T>>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
{
var baseUrl = configuration.GetOperationServerUrl(options.Operation, options.OperationIndex) ?? _baseUrl;
var clientOptions = new RestClientOptions(baseUrl)
{
ClientCertificates = configuration.ClientCertificates,
@ -484,7 +483,7 @@ namespace Org.OpenAPITools.Client
{
InterceptRequest(request);
RestResponse<T> response = getResponse(client);
RestResponse<T> response = await getResponse(client);
// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
@ -580,21 +579,21 @@ namespace Org.OpenAPITools.Client
clientOptions.CookieContainer = cookies;
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
Func<RestClient, Task<RestResponse<T>>> getResponse = (client) =>
{
if (RetryConfiguration.RetryPolicy != null)
{
var policy = RetryConfiguration.RetryPolicy;
var policyResult = policy.ExecuteAndCapture(() => client.Execute(request));
return DeserializeRestResponseFromPolicy<T>(client, request, policyResult);
return Task.FromResult(DeserializeRestResponseFromPolicy<T>(client, request, policyResult));
}
else
{
return client.Execute<T>(request);
return Task.FromResult(client.Execute<T>(request));
}
};
return ExecClient(getResponse, setOptions, request, options, configuration);
return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult();
}
private Task<ApiResponse<T>> ExecAsync<T>(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken))
@ -604,9 +603,7 @@ namespace Org.OpenAPITools.Client
//no extra options
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
{
Func<Task<RestResponse<T>>> action = async () =>
Func<RestClient, Task<RestResponse<T>>> getResponse = async (client) =>
{
if (RetryConfiguration.AsyncRetryPolicy != null)
{
@ -619,10 +616,8 @@ namespace Org.OpenAPITools.Client
return await client.ExecuteAsync<T>(request, cancellationToken).ConfigureAwait(false);
}
};
return action().Result;
};
return Task.FromResult<ApiResponse<T>>(ExecClient(getResponse, setOptions, request, options, configuration));
return ExecClientAsync(getResponse, setOptions, request, options, configuration);
}
#region IAsynchronousClient

View File

@ -448,10 +448,9 @@ namespace Org.OpenAPITools.Client
/// <param name="configuration">A per-request configuration object.
/// It is assumed that any merge with GlobalConfiguration has been done before calling this method.</param>
/// <returns>A new ApiResponse instance.</returns>
private ApiResponse<T> ExecClient<T>(Func<RestClient, RestResponse<T>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
private async Task<ApiResponse<T>> ExecClientAsync<T>(Func<RestClient, Task<RestResponse<T>>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
{
var baseUrl = configuration.GetOperationServerUrl(options.Operation, options.OperationIndex) ?? _baseUrl;
var clientOptions = new RestClientOptions(baseUrl)
{
ClientCertificates = configuration.ClientCertificates,
@ -468,7 +467,7 @@ namespace Org.OpenAPITools.Client
{
InterceptRequest(request);
RestResponse<T> response = getResponse(client);
RestResponse<T> response = await getResponse(client);
// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
@ -564,21 +563,21 @@ namespace Org.OpenAPITools.Client
clientOptions.CookieContainer = cookies;
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
Func<RestClient, Task<RestResponse<T>>> getResponse = (client) =>
{
if (RetryConfiguration.RetryPolicy != null)
{
var policy = RetryConfiguration.RetryPolicy;
var policyResult = policy.ExecuteAndCapture(() => client.Execute(request));
return DeserializeRestResponseFromPolicy<T>(client, request, policyResult);
return Task.FromResult(DeserializeRestResponseFromPolicy<T>(client, request, policyResult));
}
else
{
return client.Execute<T>(request);
return Task.FromResult(client.Execute<T>(request));
}
};
return ExecClient(getResponse, setOptions, request, options, configuration);
return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult();
}
private Task<ApiResponse<T>> ExecAsync<T>(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken))
@ -588,9 +587,7 @@ namespace Org.OpenAPITools.Client
//no extra options
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
{
Func<Task<RestResponse<T>>> action = async () =>
Func<RestClient, Task<RestResponse<T>>> getResponse = async (client) =>
{
if (RetryConfiguration.AsyncRetryPolicy != null)
{
@ -603,10 +600,8 @@ namespace Org.OpenAPITools.Client
return await client.ExecuteAsync<T>(request, cancellationToken).ConfigureAwait(false);
}
};
return action().Result;
};
return Task.FromResult<ApiResponse<T>>(ExecClient(getResponse, setOptions, request, options, configuration));
return ExecClientAsync(getResponse, setOptions, request, options, configuration);
}
#region IAsynchronousClient

View File

@ -450,10 +450,9 @@ namespace Org.OpenAPITools.Client
/// <param name="configuration">A per-request configuration object.
/// It is assumed that any merge with GlobalConfiguration has been done before calling this method.</param>
/// <returns>A new ApiResponse instance.</returns>
private ApiResponse<T> ExecClient<T>(Func<RestClient, RestResponse<T>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
private async Task<ApiResponse<T>> ExecClientAsync<T>(Func<RestClient, Task<RestResponse<T>>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
{
var baseUrl = configuration.GetOperationServerUrl(options.Operation, options.OperationIndex) ?? _baseUrl;
var clientOptions = new RestClientOptions(baseUrl)
{
ClientCertificates = configuration.ClientCertificates,
@ -485,7 +484,7 @@ namespace Org.OpenAPITools.Client
{
InterceptRequest(request);
RestResponse<T> response = getResponse(client);
RestResponse<T> response = await getResponse(client);
// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
@ -581,21 +580,21 @@ namespace Org.OpenAPITools.Client
clientOptions.CookieContainer = cookies;
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
Func<RestClient, Task<RestResponse<T>>> getResponse = (client) =>
{
if (RetryConfiguration.RetryPolicy != null)
{
var policy = RetryConfiguration.RetryPolicy;
var policyResult = policy.ExecuteAndCapture(() => client.Execute(request));
return DeserializeRestResponseFromPolicy<T>(client, request, policyResult);
return Task.FromResult(DeserializeRestResponseFromPolicy<T>(client, request, policyResult));
}
else
{
return client.Execute<T>(request);
return Task.FromResult(client.Execute<T>(request));
}
};
return ExecClient(getResponse, setOptions, request, options, configuration);
return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult();
}
private Task<ApiResponse<T>> ExecAsync<T>(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken))
@ -605,9 +604,7 @@ namespace Org.OpenAPITools.Client
//no extra options
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
{
Func<Task<RestResponse<T>>> action = async () =>
Func<RestClient, Task<RestResponse<T>>> getResponse = async (client) =>
{
if (RetryConfiguration.AsyncRetryPolicy != null)
{
@ -620,10 +617,8 @@ namespace Org.OpenAPITools.Client
return await client.ExecuteAsync<T>(request, cancellationToken).ConfigureAwait(false);
}
};
return action().Result;
};
return Task.FromResult<ApiResponse<T>>(ExecClient(getResponse, setOptions, request, options, configuration));
return ExecClientAsync(getResponse, setOptions, request, options, configuration);
}
#region IAsynchronousClient

View File

@ -450,10 +450,9 @@ namespace Org.OpenAPITools.Client
/// <param name="configuration">A per-request configuration object.
/// It is assumed that any merge with GlobalConfiguration has been done before calling this method.</param>
/// <returns>A new ApiResponse instance.</returns>
private ApiResponse<T> ExecClient<T>(Func<RestClient, RestResponse<T>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
private async Task<ApiResponse<T>> ExecClientAsync<T>(Func<RestClient, Task<RestResponse<T>>> getResponse, Action<RestClientOptions> setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration)
{
var baseUrl = configuration.GetOperationServerUrl(options.Operation, options.OperationIndex) ?? _baseUrl;
var clientOptions = new RestClientOptions(baseUrl)
{
ClientCertificates = configuration.ClientCertificates,
@ -485,7 +484,7 @@ namespace Org.OpenAPITools.Client
{
InterceptRequest(request);
RestResponse<T> response = getResponse(client);
RestResponse<T> response = await getResponse(client);
// if the response type is oneOf/anyOf, call FromJSON to deserialize the data
if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T)))
@ -581,21 +580,21 @@ namespace Org.OpenAPITools.Client
clientOptions.CookieContainer = cookies;
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
Func<RestClient, Task<RestResponse<T>>> getResponse = (client) =>
{
if (RetryConfiguration.RetryPolicy != null)
{
var policy = RetryConfiguration.RetryPolicy;
var policyResult = policy.ExecuteAndCapture(() => client.Execute(request));
return DeserializeRestResponseFromPolicy<T>(client, request, policyResult);
return Task.FromResult(DeserializeRestResponseFromPolicy<T>(client, request, policyResult));
}
else
{
return client.Execute<T>(request);
return Task.FromResult(client.Execute<T>(request));
}
};
return ExecClient(getResponse, setOptions, request, options, configuration);
return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult();
}
private Task<ApiResponse<T>> ExecAsync<T>(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken))
@ -605,9 +604,7 @@ namespace Org.OpenAPITools.Client
//no extra options
};
Func<RestClient, RestResponse<T>> getResponse = (client) =>
{
Func<Task<RestResponse<T>>> action = async () =>
Func<RestClient, Task<RestResponse<T>>> getResponse = async (client) =>
{
if (RetryConfiguration.AsyncRetryPolicy != null)
{
@ -620,10 +617,8 @@ namespace Org.OpenAPITools.Client
return await client.ExecuteAsync<T>(request, cancellationToken).ConfigureAwait(false);
}
};
return action().Result;
};
return Task.FromResult<ApiResponse<T>>(ExecClient(getResponse, setOptions, request, options, configuration));
return ExecClientAsync(getResponse, setOptions, request, options, configuration);
}
#region IAsynchronousClient