Asp.net web api Web Api上的RetryPolicy导致超时

Asp.net web api Web Api上的RetryPolicy导致超时,asp.net-web-api,asp.net-web-api2,asp.net-core-webapi,webapi,retrypolicy,Asp.net Web Api,Asp.net Web Api2,Asp.net Core Webapi,Webapi,Retrypolicy,我有一个Web Api,它调用另一个Web Api调用来获取一些信息。为了使应用程序更具弹性,我按照以下步骤实施了HttpTransientErrorDetectionStrategy: 之后,我使用如下代码调用另一个web应用程序: RetryPolicy _retryPolicy = new RetryPolicy<HttpTransientErrorDetectionStrategy>( new ExponentialBackoff(retryCount: 2, min

我有一个Web Api,它调用另一个Web Api调用来获取一些信息。为了使应用程序更具弹性,我按照以下步骤实施了HttpTransientErrorDetectionStrategy:

之后,我使用如下代码调用另一个web应用程序:

RetryPolicy _retryPolicy = new RetryPolicy<HttpTransientErrorDetectionStrategy>(
    new ExponentialBackoff(retryCount: 2, minBackoff: TimeSpan.FromSeconds(0), maxBackoff: TimeSpan.FromSeconds(10), deltaBackoff: TimeSpan.FromSeconds(2)));

var _httpClient = new HttpClient
{
    BaseAddress = new Uri("http://www.microsoft.com")
};

HttpResponseMessage response = _retryPolicy.ExecuteAsync(async () => await _httpClient.GetAsync($"", HttpCompletionOption.ResponseContentRead)).Result;
_httpClient.GetAsync调用卡住了,我不知道为什么。如果删除_retryPolicy,直接使用_httpClient.GetAsync,它将在几秒钟内返回

我在一个控制台应用程序上有类似的代码,可以调用同一个web应用程序,而且运行良好,因此这似乎是我在web API中使用它的特定方式。这本打算是Azure上的一个应用程序,但在本地调试时也会发生。有人知道为什么会卡住吗?我如何调试这个

谢谢大家!

我在一个控制台应用程序上有类似的代码,可以调用同一个web应用程序,而且运行良好,因此这似乎是我在web API中使用它的特定方式

您发布的代码在此处被阻止:

HttpResponseMessage response = _retryPolicy.ExecuteAsync(...).Result;
。相反,请使用wait:

如果删除_retryPolicy,直接使用_httpClient.GetAsync,它将在几秒钟内返回

如果您的原始代码正在阻塞,并且由于某种原因必须阻塞异步代码,则可以使用:

或:


另外,我最初的感觉是,当事情陷入困境时,可能是某种异步问题。您是否在调试中完成了这一行,但它似乎从未完成?太好了,这些建议中的任何一个都解决了我的问题!非常感谢。
HttpResponseMessage response = await _retryPolicy.ExecuteAsync(...);
HttpResponseMessage response = _retryPolicy.ExecuteAsync(async () => await _httpClient.GetAsync($"", HttpCompletionOption.ResponseContentRead).ConfigureAwait(false)).Result;
HttpResponseMessage response = _retryPolicy.ExecuteAsync(() => _httpClient.GetAsync($"", HttpCompletionOption.ResponseContentRead)).Result;