From af94bde2ceb8ac4a36cad7e037ec397b515c6024 Mon Sep 17 00:00:00 2001
From: Filipe Silva <4389874+filipe-silva@users.noreply.github.com>
Date: Sun, 4 Aug 2024 11:33:33 +0100
Subject: [PATCH] #19176 fix Task.Result directly blocks thread (#19231)
- 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 0d826c87c9d..1cf23cc2bc5 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,
@@ -486,7 +485,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)))
@@ -582,21 +581,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}}
@@ -607,29 +606,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 7d3e7d96adf..1fcf07903a6 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,
@@ -485,7 +484,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)))
@@ -581,21 +580,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))
@@ -605,25 +604,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 a55d7f34afc..e383b0f70fe 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,
@@ -485,7 +484,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)))
@@ -581,21 +580,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))
@@ -605,25 +604,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 a55d7f34afc..e383b0f70fe 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,
@@ -485,7 +484,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)))
@@ -581,21 +580,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))
@@ -605,25 +604,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 05e2ddb4de8..3b6edaa8b48 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,
@@ -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/net7/Petstore/src/Org.OpenAPITools/Client/ApiClient.cs b/samples/client/petstore/csharp/restsharp/net7/Petstore/src/Org.OpenAPITools/Client/ApiClient.cs
index 05e2ddb4de8..3b6edaa8b48 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,
@@ -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/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