From 2fd7c41b3d3705d00610a93c20120f575afcb706 Mon Sep 17 00:00:00 2001 From: filipe Date: Sat, 20 Jul 2024 11:01:58 +0100 Subject: [PATCH] #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. --- .../main/resources/csharp/ApiClient.mustache | 47 +++++++++---------- .../src/Org.OpenAPITools/Client/ApiClient.cs | 39 +++++++-------- .../src/Org.OpenAPITools/Client/ApiClient.cs | 39 +++++++-------- .../src/Org.OpenAPITools/Client/ApiClient.cs | 39 +++++++-------- .../src/Org.OpenAPITools/Client/ApiClient.cs | 39 +++++++-------- .../src/Org.OpenAPITools/Client/ApiClient.cs | 39 +++++++-------- .../src/Org.OpenAPITools/Client/ApiClient.cs | 39 +++++++-------- .../src/Org.OpenAPITools/Client/ApiClient.cs | 39 +++++++-------- .../src/Org.OpenAPITools/Client/ApiClient.cs | 39 +++++++-------- .../src/Org.OpenAPITools/Client/ApiClient.cs | 39 +++++++-------- .../src/Org.OpenAPITools/Client/ApiClient.cs | 39 +++++++-------- .../src/Org.OpenAPITools/Client/ApiClient.cs | 39 +++++++-------- 12 files changed, 208 insertions(+), 268 deletions(-) diff --git a/modules/openapi-generator/src/main/resources/csharp/ApiClient.mustache b/modules/openapi-generator/src/main/resources/csharp/ApiClient.mustache index eb5be40d3ae..d9369b1bc08 100644 --- a/modules/openapi-generator/src/main/resources/csharp/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/csharp/ApiClient.mustache @@ -449,10 +449,9 @@ namespace {{packageName}}.Client /// A per-request configuration object. /// It is assumed that any merge with GlobalConfiguration has been done before calling this method. /// A new ApiResponse instance. - private ApiResponse ExecClient(Func> getResponse, Action setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration) + private async Task> ExecClientAsync(Func>> getResponse, Action 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 {{packageName}}.Client { InterceptRequest(request); - RestResponse response = getResponse(client); + RestResponse 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 {{packageName}}.Client clientOptions.CookieContainer = cookies; }; - Func> getResponse = (client) => + Func>> getResponse = (client) => { if (RetryConfiguration.RetryPolicy != null) { var policy = RetryConfiguration.RetryPolicy; var policyResult = policy.ExecuteAndCapture(() => client.Execute(request)); - return DeserializeRestResponseFromPolicy(client, request, policyResult); + return Task.FromResult(DeserializeRestResponseFromPolicy(client, request, policyResult)); } else { - return client.Execute(request); + return Task.FromResult(client.Execute(request)); } }; - return ExecClient(getResponse, setOptions, request, options, configuration); + return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult(); } {{#supportsAsync}} @@ -606,29 +605,25 @@ namespace {{packageName}}.Client //no extra options }; - Func> getResponse = (client) => + Func>> getResponse = async (client) => { - Func>> action = async () => + {{#supportsRetry}} + if (RetryConfiguration.AsyncRetryPolicy != null) { - {{#supportsRetry}} - if (RetryConfiguration.AsyncRetryPolicy != null) - { - var policy = RetryConfiguration.AsyncRetryPolicy; - var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); - return DeserializeRestResponseFromPolicy(client, request, policyResult); - } - else - { - {{/supportsRetry}} - return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); - {{#supportsRetry}} - } - {{/supportsRetry}} - }; - return action().Result; + var policy = RetryConfiguration.AsyncRetryPolicy; + var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); + return DeserializeRestResponseFromPolicy(client, request, policyResult); + } + else + { + {{/supportsRetry}} + return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); + {{#supportsRetry}} + } + {{/supportsRetry}} }; - return Task.FromResult>(ExecClient(getResponse, setOptions, request, options, configuration)); + return ExecClientAsync(getResponse, setOptions, request, options, configuration); } #region IAsynchronousClient diff --git a/samples/client/echo_api/csharp-restsharp/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/echo_api/csharp-restsharp/src/Org.OpenAPITools/Client/ApiClient.cs index 1f3056ed28e..e3ae4e14ff0 100644 --- a/samples/client/echo_api/csharp-restsharp/src/Org.OpenAPITools/Client/ApiClient.cs +++ b/samples/client/echo_api/csharp-restsharp/src/Org.OpenAPITools/Client/ApiClient.cs @@ -449,10 +449,9 @@ namespace Org.OpenAPITools.Client /// A per-request configuration object. /// It is assumed that any merge with GlobalConfiguration has been done before calling this method. /// A new ApiResponse instance. - private ApiResponse ExecClient(Func> getResponse, Action setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration) + private async Task> ExecClientAsync(Func>> getResponse, Action 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 response = getResponse(client); + RestResponse 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> getResponse = (client) => + Func>> getResponse = (client) => { if (RetryConfiguration.RetryPolicy != null) { var policy = RetryConfiguration.RetryPolicy; var policyResult = policy.ExecuteAndCapture(() => client.Execute(request)); - return DeserializeRestResponseFromPolicy(client, request, policyResult); + return Task.FromResult(DeserializeRestResponseFromPolicy(client, request, policyResult)); } else { - return client.Execute(request); + return Task.FromResult(client.Execute(request)); } }; - return ExecClient(getResponse, setOptions, request, options, configuration); + return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult(); } private Task> ExecAsync(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken)) @@ -589,25 +588,21 @@ namespace Org.OpenAPITools.Client //no extra options }; - Func> getResponse = (client) => + Func>> getResponse = async (client) => { - Func>> action = async () => + if (RetryConfiguration.AsyncRetryPolicy != null) { - if (RetryConfiguration.AsyncRetryPolicy != null) - { - var policy = RetryConfiguration.AsyncRetryPolicy; - var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); - return DeserializeRestResponseFromPolicy(client, request, policyResult); - } - else - { - return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); - } - }; - return action().Result; + var policy = RetryConfiguration.AsyncRetryPolicy; + var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); + return DeserializeRestResponseFromPolicy(client, request, policyResult); + } + else + { + return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); + } }; - return Task.FromResult>(ExecClient(getResponse, setOptions, request, options, configuration)); + return ExecClientAsync(getResponse, setOptions, request, options, configuration); } #region IAsynchronousClient diff --git a/samples/client/others/csharp-complex-files/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/others/csharp-complex-files/src/Org.OpenAPITools/Client/ApiClient.cs index 789c14ac264..556ac501524 100644 --- a/samples/client/others/csharp-complex-files/src/Org.OpenAPITools/Client/ApiClient.cs +++ b/samples/client/others/csharp-complex-files/src/Org.OpenAPITools/Client/ApiClient.cs @@ -449,10 +449,9 @@ namespace Org.OpenAPITools.Client /// A per-request configuration object. /// It is assumed that any merge with GlobalConfiguration has been done before calling this method. /// A new ApiResponse instance. - private ApiResponse ExecClient(Func> getResponse, Action setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration) + private async Task> ExecClientAsync(Func>> getResponse, Action 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 response = getResponse(client); + RestResponse 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> getResponse = (client) => + Func>> getResponse = (client) => { if (RetryConfiguration.RetryPolicy != null) { var policy = RetryConfiguration.RetryPolicy; var policyResult = policy.ExecuteAndCapture(() => client.Execute(request)); - return DeserializeRestResponseFromPolicy(client, request, policyResult); + return Task.FromResult(DeserializeRestResponseFromPolicy(client, request, policyResult)); } else { - return client.Execute(request); + return Task.FromResult(client.Execute(request)); } }; - return ExecClient(getResponse, setOptions, request, options, configuration); + return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult(); } private Task> ExecAsync(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken)) @@ -589,25 +588,21 @@ namespace Org.OpenAPITools.Client //no extra options }; - Func> getResponse = (client) => + Func>> getResponse = async (client) => { - Func>> action = async () => + if (RetryConfiguration.AsyncRetryPolicy != null) { - if (RetryConfiguration.AsyncRetryPolicy != null) - { - var policy = RetryConfiguration.AsyncRetryPolicy; - var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); - return DeserializeRestResponseFromPolicy(client, request, policyResult); - } - else - { - return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); - } - }; - return action().Result; + var policy = RetryConfiguration.AsyncRetryPolicy; + var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); + return DeserializeRestResponseFromPolicy(client, request, policyResult); + } + else + { + return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); + } }; - return Task.FromResult>(ExecClient(getResponse, setOptions, request, options, configuration)); + return ExecClientAsync(getResponse, setOptions, request, options, configuration); } #region IAsynchronousClient diff --git a/samples/client/petstore/csharp/restsharp/net4.7/MultipleFrameworks/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/petstore/csharp/restsharp/net4.7/MultipleFrameworks/src/Org.OpenAPITools/Client/ApiClient.cs index 7f9fc8d8a17..f599a4955a3 100644 --- a/samples/client/petstore/csharp/restsharp/net4.7/MultipleFrameworks/src/Org.OpenAPITools/Client/ApiClient.cs +++ b/samples/client/petstore/csharp/restsharp/net4.7/MultipleFrameworks/src/Org.OpenAPITools/Client/ApiClient.cs @@ -450,10 +450,9 @@ namespace Org.OpenAPITools.Client /// A per-request configuration object. /// It is assumed that any merge with GlobalConfiguration has been done before calling this method. /// A new ApiResponse instance. - private ApiResponse ExecClient(Func> getResponse, Action setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration) + private async Task> ExecClientAsync(Func>> getResponse, Action 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 response = getResponse(client); + RestResponse 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> getResponse = (client) => + Func>> getResponse = (client) => { if (RetryConfiguration.RetryPolicy != null) { var policy = RetryConfiguration.RetryPolicy; var policyResult = policy.ExecuteAndCapture(() => client.Execute(request)); - return DeserializeRestResponseFromPolicy(client, request, policyResult); + return Task.FromResult(DeserializeRestResponseFromPolicy(client, request, policyResult)); } else { - return client.Execute(request); + return Task.FromResult(client.Execute(request)); } }; - return ExecClient(getResponse, setOptions, request, options, configuration); + return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult(); } private Task> ExecAsync(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken)) @@ -604,25 +603,21 @@ namespace Org.OpenAPITools.Client //no extra options }; - Func> getResponse = (client) => + Func>> getResponse = async (client) => { - Func>> action = async () => + if (RetryConfiguration.AsyncRetryPolicy != null) { - if (RetryConfiguration.AsyncRetryPolicy != null) - { - var policy = RetryConfiguration.AsyncRetryPolicy; - var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); - return DeserializeRestResponseFromPolicy(client, request, policyResult); - } - else - { - return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); - } - }; - return action().Result; + var policy = RetryConfiguration.AsyncRetryPolicy; + var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); + return DeserializeRestResponseFromPolicy(client, request, policyResult); + } + else + { + return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); + } }; - return Task.FromResult>(ExecClient(getResponse, setOptions, request, options, configuration)); + return ExecClientAsync(getResponse, setOptions, request, options, configuration); } #region IAsynchronousClient diff --git a/samples/client/petstore/csharp/restsharp/net4.7/Petstore/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/petstore/csharp/restsharp/net4.7/Petstore/src/Org.OpenAPITools/Client/ApiClient.cs index 0ad9a7e2d52..60e8c391372 100644 --- a/samples/client/petstore/csharp/restsharp/net4.7/Petstore/src/Org.OpenAPITools/Client/ApiClient.cs +++ b/samples/client/petstore/csharp/restsharp/net4.7/Petstore/src/Org.OpenAPITools/Client/ApiClient.cs @@ -450,10 +450,9 @@ namespace Org.OpenAPITools.Client /// A per-request configuration object. /// It is assumed that any merge with GlobalConfiguration has been done before calling this method. /// A new ApiResponse instance. - private ApiResponse ExecClient(Func> getResponse, Action setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration) + private async Task> ExecClientAsync(Func>> getResponse, Action 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 response = getResponse(client); + RestResponse 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> getResponse = (client) => + Func>> getResponse = (client) => { if (RetryConfiguration.RetryPolicy != null) { var policy = RetryConfiguration.RetryPolicy; var policyResult = policy.ExecuteAndCapture(() => client.Execute(request)); - return DeserializeRestResponseFromPolicy(client, request, policyResult); + return Task.FromResult(DeserializeRestResponseFromPolicy(client, request, policyResult)); } else { - return client.Execute(request); + return Task.FromResult(client.Execute(request)); } }; - return ExecClient(getResponse, setOptions, request, options, configuration); + return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult(); } private Task> ExecAsync(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken)) @@ -604,25 +603,21 @@ namespace Org.OpenAPITools.Client //no extra options }; - Func> getResponse = (client) => + Func>> getResponse = async (client) => { - Func>> action = async () => + if (RetryConfiguration.AsyncRetryPolicy != null) { - if (RetryConfiguration.AsyncRetryPolicy != null) - { - var policy = RetryConfiguration.AsyncRetryPolicy; - var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); - return DeserializeRestResponseFromPolicy(client, request, policyResult); - } - else - { - return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); - } - }; - return action().Result; + var policy = RetryConfiguration.AsyncRetryPolicy; + var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); + return DeserializeRestResponseFromPolicy(client, request, policyResult); + } + else + { + return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); + } }; - return Task.FromResult>(ExecClient(getResponse, setOptions, request, options, configuration)); + return ExecClientAsync(getResponse, setOptions, request, options, configuration); } #region IAsynchronousClient diff --git a/samples/client/petstore/csharp/restsharp/net4.8/Petstore/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/petstore/csharp/restsharp/net4.8/Petstore/src/Org.OpenAPITools/Client/ApiClient.cs index 0ad9a7e2d52..60e8c391372 100644 --- a/samples/client/petstore/csharp/restsharp/net4.8/Petstore/src/Org.OpenAPITools/Client/ApiClient.cs +++ b/samples/client/petstore/csharp/restsharp/net4.8/Petstore/src/Org.OpenAPITools/Client/ApiClient.cs @@ -450,10 +450,9 @@ namespace Org.OpenAPITools.Client /// A per-request configuration object. /// It is assumed that any merge with GlobalConfiguration has been done before calling this method. /// A new ApiResponse instance. - private ApiResponse ExecClient(Func> getResponse, Action setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration) + private async Task> ExecClientAsync(Func>> getResponse, Action 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 response = getResponse(client); + RestResponse 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> getResponse = (client) => + Func>> getResponse = (client) => { if (RetryConfiguration.RetryPolicy != null) { var policy = RetryConfiguration.RetryPolicy; var policyResult = policy.ExecuteAndCapture(() => client.Execute(request)); - return DeserializeRestResponseFromPolicy(client, request, policyResult); + return Task.FromResult(DeserializeRestResponseFromPolicy(client, request, policyResult)); } else { - return client.Execute(request); + return Task.FromResult(client.Execute(request)); } }; - return ExecClient(getResponse, setOptions, request, options, configuration); + return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult(); } private Task> ExecAsync(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken)) @@ -604,25 +603,21 @@ namespace Org.OpenAPITools.Client //no extra options }; - Func> getResponse = (client) => + Func>> getResponse = async (client) => { - Func>> action = async () => + if (RetryConfiguration.AsyncRetryPolicy != null) { - if (RetryConfiguration.AsyncRetryPolicy != null) - { - var policy = RetryConfiguration.AsyncRetryPolicy; - var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); - return DeserializeRestResponseFromPolicy(client, request, policyResult); - } - else - { - return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); - } - }; - return action().Result; + var policy = RetryConfiguration.AsyncRetryPolicy; + var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); + return DeserializeRestResponseFromPolicy(client, request, policyResult); + } + else + { + return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); + } }; - return Task.FromResult>(ExecClient(getResponse, setOptions, request, options, configuration)); + return ExecClientAsync(getResponse, setOptions, request, options, configuration); } #region IAsynchronousClient diff --git a/samples/client/petstore/csharp/restsharp/net6/ParameterMappings/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/petstore/csharp/restsharp/net6/ParameterMappings/src/Org.OpenAPITools/Client/ApiClient.cs index fe40f39ad5b..e66ebeceeb2 100644 --- a/samples/client/petstore/csharp/restsharp/net6/ParameterMappings/src/Org.OpenAPITools/Client/ApiClient.cs +++ b/samples/client/petstore/csharp/restsharp/net6/ParameterMappings/src/Org.OpenAPITools/Client/ApiClient.cs @@ -448,10 +448,9 @@ namespace Org.OpenAPITools.Client /// A per-request configuration object. /// It is assumed that any merge with GlobalConfiguration has been done before calling this method. /// A new ApiResponse instance. - private ApiResponse ExecClient(Func> getResponse, Action setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration) + private async Task> ExecClientAsync(Func>> getResponse, Action 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 response = getResponse(client); + RestResponse 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> getResponse = (client) => + Func>> getResponse = (client) => { if (RetryConfiguration.RetryPolicy != null) { var policy = RetryConfiguration.RetryPolicy; var policyResult = policy.ExecuteAndCapture(() => client.Execute(request)); - return DeserializeRestResponseFromPolicy(client, request, policyResult); + return Task.FromResult(DeserializeRestResponseFromPolicy(client, request, policyResult)); } else { - return client.Execute(request); + return Task.FromResult(client.Execute(request)); } }; - return ExecClient(getResponse, setOptions, request, options, configuration); + return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult(); } private Task> ExecAsync(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken)) @@ -588,25 +587,21 @@ namespace Org.OpenAPITools.Client //no extra options }; - Func> getResponse = (client) => + Func>> getResponse = async (client) => { - Func>> action = async () => + if (RetryConfiguration.AsyncRetryPolicy != null) { - if (RetryConfiguration.AsyncRetryPolicy != null) - { - var policy = RetryConfiguration.AsyncRetryPolicy; - var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); - return DeserializeRestResponseFromPolicy(client, request, policyResult); - } - else - { - return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); - } - }; - return action().Result; + var policy = RetryConfiguration.AsyncRetryPolicy; + var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); + return DeserializeRestResponseFromPolicy(client, request, policyResult); + } + else + { + return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); + } }; - return Task.FromResult>(ExecClient(getResponse, setOptions, request, options, configuration)); + return ExecClientAsync(getResponse, setOptions, request, options, configuration); } #region IAsynchronousClient diff --git a/samples/client/petstore/csharp/restsharp/net7/EnumMappings/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/petstore/csharp/restsharp/net7/EnumMappings/src/Org.OpenAPITools/Client/ApiClient.cs index 69279ed569c..cc82ae2deab 100644 --- a/samples/client/petstore/csharp/restsharp/net7/EnumMappings/src/Org.OpenAPITools/Client/ApiClient.cs +++ b/samples/client/petstore/csharp/restsharp/net7/EnumMappings/src/Org.OpenAPITools/Client/ApiClient.cs @@ -449,10 +449,9 @@ namespace Org.OpenAPITools.Client /// A per-request configuration object. /// It is assumed that any merge with GlobalConfiguration has been done before calling this method. /// A new ApiResponse instance. - private ApiResponse ExecClient(Func> getResponse, Action setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration) + private async Task> ExecClientAsync(Func>> getResponse, Action setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration) { var baseUrl = configuration.GetOperationServerUrl(options.Operation, options.OperationIndex) ?? _baseUrl; - var clientOptions = new RestClientOptions(baseUrl) { ClientCertificates = configuration.ClientCertificates, @@ -483,7 +482,7 @@ namespace Org.OpenAPITools.Client { InterceptRequest(request); - RestResponse response = getResponse(client); + RestResponse response = await getResponse(client); // if the response type is oneOf/anyOf, call FromJSON to deserialize the data if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T))) @@ -579,21 +578,21 @@ namespace Org.OpenAPITools.Client clientOptions.CookieContainer = cookies; }; - Func> getResponse = (client) => + Func>> getResponse = (client) => { if (RetryConfiguration.RetryPolicy != null) { var policy = RetryConfiguration.RetryPolicy; var policyResult = policy.ExecuteAndCapture(() => client.Execute(request)); - return DeserializeRestResponseFromPolicy(client, request, policyResult); + return Task.FromResult(DeserializeRestResponseFromPolicy(client, request, policyResult)); } else { - return client.Execute(request); + return Task.FromResult(client.Execute(request)); } }; - return ExecClient(getResponse, setOptions, request, options, configuration); + return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult(); } private Task> ExecAsync(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken)) @@ -603,25 +602,21 @@ namespace Org.OpenAPITools.Client //no extra options }; - Func> getResponse = (client) => + Func>> getResponse = async (client) => { - Func>> action = async () => + if (RetryConfiguration.AsyncRetryPolicy != null) { - if (RetryConfiguration.AsyncRetryPolicy != null) - { - var policy = RetryConfiguration.AsyncRetryPolicy; - var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); - return DeserializeRestResponseFromPolicy(client, request, policyResult); - } - else - { - return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); - } - }; - return action().Result; + var policy = RetryConfiguration.AsyncRetryPolicy; + var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); + return DeserializeRestResponseFromPolicy(client, request, policyResult); + } + else + { + return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); + } }; - return Task.FromResult>(ExecClient(getResponse, setOptions, request, options, configuration)); + return ExecClientAsync(getResponse, setOptions, request, options, configuration); } #region IAsynchronousClient diff --git a/samples/client/petstore/csharp/restsharp/net7/Petstore/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/petstore/csharp/restsharp/net7/Petstore/src/Org.OpenAPITools/Client/ApiClient.cs index 69279ed569c..cc82ae2deab 100644 --- a/samples/client/petstore/csharp/restsharp/net7/Petstore/src/Org.OpenAPITools/Client/ApiClient.cs +++ b/samples/client/petstore/csharp/restsharp/net7/Petstore/src/Org.OpenAPITools/Client/ApiClient.cs @@ -449,10 +449,9 @@ namespace Org.OpenAPITools.Client /// A per-request configuration object. /// It is assumed that any merge with GlobalConfiguration has been done before calling this method. /// A new ApiResponse instance. - private ApiResponse ExecClient(Func> getResponse, Action setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration) + private async Task> ExecClientAsync(Func>> getResponse, Action setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration) { var baseUrl = configuration.GetOperationServerUrl(options.Operation, options.OperationIndex) ?? _baseUrl; - var clientOptions = new RestClientOptions(baseUrl) { ClientCertificates = configuration.ClientCertificates, @@ -483,7 +482,7 @@ namespace Org.OpenAPITools.Client { InterceptRequest(request); - RestResponse response = getResponse(client); + RestResponse response = await getResponse(client); // if the response type is oneOf/anyOf, call FromJSON to deserialize the data if (typeof(AbstractOpenAPISchema).IsAssignableFrom(typeof(T))) @@ -579,21 +578,21 @@ namespace Org.OpenAPITools.Client clientOptions.CookieContainer = cookies; }; - Func> getResponse = (client) => + Func>> getResponse = (client) => { if (RetryConfiguration.RetryPolicy != null) { var policy = RetryConfiguration.RetryPolicy; var policyResult = policy.ExecuteAndCapture(() => client.Execute(request)); - return DeserializeRestResponseFromPolicy(client, request, policyResult); + return Task.FromResult(DeserializeRestResponseFromPolicy(client, request, policyResult)); } else { - return client.Execute(request); + return Task.FromResult(client.Execute(request)); } }; - return ExecClient(getResponse, setOptions, request, options, configuration); + return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult(); } private Task> ExecAsync(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken)) @@ -603,25 +602,21 @@ namespace Org.OpenAPITools.Client //no extra options }; - Func> getResponse = (client) => + Func>> getResponse = async (client) => { - Func>> action = async () => + if (RetryConfiguration.AsyncRetryPolicy != null) { - if (RetryConfiguration.AsyncRetryPolicy != null) - { - var policy = RetryConfiguration.AsyncRetryPolicy; - var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); - return DeserializeRestResponseFromPolicy(client, request, policyResult); - } - else - { - return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); - } - }; - return action().Result; + var policy = RetryConfiguration.AsyncRetryPolicy; + var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); + return DeserializeRestResponseFromPolicy(client, request, policyResult); + } + else + { + return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); + } }; - return Task.FromResult>(ExecClient(getResponse, setOptions, request, options, configuration)); + return ExecClientAsync(getResponse, setOptions, request, options, configuration); } #region IAsynchronousClient diff --git a/samples/client/petstore/csharp/restsharp/net7/UseDateTimeForDate/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/petstore/csharp/restsharp/net7/UseDateTimeForDate/src/Org.OpenAPITools/Client/ApiClient.cs index 9190dbea600..c98004a0527 100644 --- a/samples/client/petstore/csharp/restsharp/net7/UseDateTimeForDate/src/Org.OpenAPITools/Client/ApiClient.cs +++ b/samples/client/petstore/csharp/restsharp/net7/UseDateTimeForDate/src/Org.OpenAPITools/Client/ApiClient.cs @@ -448,10 +448,9 @@ namespace Org.OpenAPITools.Client /// A per-request configuration object. /// It is assumed that any merge with GlobalConfiguration has been done before calling this method. /// A new ApiResponse instance. - private ApiResponse ExecClient(Func> getResponse, Action setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration) + private async Task> ExecClientAsync(Func>> getResponse, Action 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 response = getResponse(client); + RestResponse 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> getResponse = (client) => + Func>> getResponse = (client) => { if (RetryConfiguration.RetryPolicy != null) { var policy = RetryConfiguration.RetryPolicy; var policyResult = policy.ExecuteAndCapture(() => client.Execute(request)); - return DeserializeRestResponseFromPolicy(client, request, policyResult); + return Task.FromResult(DeserializeRestResponseFromPolicy(client, request, policyResult)); } else { - return client.Execute(request); + return Task.FromResult(client.Execute(request)); } }; - return ExecClient(getResponse, setOptions, request, options, configuration); + return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult(); } private Task> ExecAsync(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken)) @@ -588,25 +587,21 @@ namespace Org.OpenAPITools.Client //no extra options }; - Func> getResponse = (client) => + Func>> getResponse = async (client) => { - Func>> action = async () => + if (RetryConfiguration.AsyncRetryPolicy != null) { - if (RetryConfiguration.AsyncRetryPolicy != null) - { - var policy = RetryConfiguration.AsyncRetryPolicy; - var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); - return DeserializeRestResponseFromPolicy(client, request, policyResult); - } - else - { - return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); - } - }; - return action().Result; + var policy = RetryConfiguration.AsyncRetryPolicy; + var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); + return DeserializeRestResponseFromPolicy(client, request, policyResult); + } + else + { + return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); + } }; - return Task.FromResult>(ExecClient(getResponse, setOptions, request, options, configuration)); + return ExecClientAsync(getResponse, setOptions, request, options, configuration); } #region IAsynchronousClient diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/src/Org.OpenAPITools/Client/ApiClient.cs index 0ad9a7e2d52..60e8c391372 100644 --- a/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/src/Org.OpenAPITools/Client/ApiClient.cs +++ b/samples/client/petstore/csharp/restsharp/standard2.0/ConditionalSerialization/src/Org.OpenAPITools/Client/ApiClient.cs @@ -450,10 +450,9 @@ namespace Org.OpenAPITools.Client /// A per-request configuration object. /// It is assumed that any merge with GlobalConfiguration has been done before calling this method. /// A new ApiResponse instance. - private ApiResponse ExecClient(Func> getResponse, Action setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration) + private async Task> ExecClientAsync(Func>> getResponse, Action 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 response = getResponse(client); + RestResponse 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> getResponse = (client) => + Func>> getResponse = (client) => { if (RetryConfiguration.RetryPolicy != null) { var policy = RetryConfiguration.RetryPolicy; var policyResult = policy.ExecuteAndCapture(() => client.Execute(request)); - return DeserializeRestResponseFromPolicy(client, request, policyResult); + return Task.FromResult(DeserializeRestResponseFromPolicy(client, request, policyResult)); } else { - return client.Execute(request); + return Task.FromResult(client.Execute(request)); } }; - return ExecClient(getResponse, setOptions, request, options, configuration); + return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult(); } private Task> ExecAsync(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken)) @@ -604,25 +603,21 @@ namespace Org.OpenAPITools.Client //no extra options }; - Func> getResponse = (client) => + Func>> getResponse = async (client) => { - Func>> action = async () => + if (RetryConfiguration.AsyncRetryPolicy != null) { - if (RetryConfiguration.AsyncRetryPolicy != null) - { - var policy = RetryConfiguration.AsyncRetryPolicy; - var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); - return DeserializeRestResponseFromPolicy(client, request, policyResult); - } - else - { - return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); - } - }; - return action().Result; + var policy = RetryConfiguration.AsyncRetryPolicy; + var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); + return DeserializeRestResponseFromPolicy(client, request, policyResult); + } + else + { + return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); + } }; - return Task.FromResult>(ExecClient(getResponse, setOptions, request, options, configuration)); + return ExecClientAsync(getResponse, setOptions, request, options, configuration); } #region IAsynchronousClient diff --git a/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/src/Org.OpenAPITools/Client/ApiClient.cs index 0ad9a7e2d52..60e8c391372 100644 --- a/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/src/Org.OpenAPITools/Client/ApiClient.cs +++ b/samples/client/petstore/csharp/restsharp/standard2.0/Petstore/src/Org.OpenAPITools/Client/ApiClient.cs @@ -450,10 +450,9 @@ namespace Org.OpenAPITools.Client /// A per-request configuration object. /// It is assumed that any merge with GlobalConfiguration has been done before calling this method. /// A new ApiResponse instance. - private ApiResponse ExecClient(Func> getResponse, Action setOptions, RestRequest request, RequestOptions options, IReadableConfiguration configuration) + private async Task> ExecClientAsync(Func>> getResponse, Action 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 response = getResponse(client); + RestResponse 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> getResponse = (client) => + Func>> getResponse = (client) => { if (RetryConfiguration.RetryPolicy != null) { var policy = RetryConfiguration.RetryPolicy; var policyResult = policy.ExecuteAndCapture(() => client.Execute(request)); - return DeserializeRestResponseFromPolicy(client, request, policyResult); + return Task.FromResult(DeserializeRestResponseFromPolicy(client, request, policyResult)); } else { - return client.Execute(request); + return Task.FromResult(client.Execute(request)); } }; - return ExecClient(getResponse, setOptions, request, options, configuration); + return ExecClientAsync(getResponse, setOptions, request, options, configuration).GetAwaiter().GetResult(); } private Task> ExecAsync(RestRequest request, RequestOptions options, IReadableConfiguration configuration, CancellationToken cancellationToken = default(CancellationToken)) @@ -604,25 +603,21 @@ namespace Org.OpenAPITools.Client //no extra options }; - Func> getResponse = (client) => + Func>> getResponse = async (client) => { - Func>> action = async () => + if (RetryConfiguration.AsyncRetryPolicy != null) { - if (RetryConfiguration.AsyncRetryPolicy != null) - { - var policy = RetryConfiguration.AsyncRetryPolicy; - var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); - return DeserializeRestResponseFromPolicy(client, request, policyResult); - } - else - { - return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); - } - }; - return action().Result; + var policy = RetryConfiguration.AsyncRetryPolicy; + var policyResult = await policy.ExecuteAndCaptureAsync((ct) => client.ExecuteAsync(request, ct), cancellationToken).ConfigureAwait(false); + return DeserializeRestResponseFromPolicy(client, request, policyResult); + } + else + { + return await client.ExecuteAsync(request, cancellationToken).ConfigureAwait(false); + } }; - return Task.FromResult>(ExecClient(getResponse, setOptions, request, options, configuration)); + return ExecClientAsync(getResponse, setOptions, request, options, configuration); } #region IAsynchronousClient