HttpClient.PostAsync未等待时会发生什么



我正在检查一些似乎抛出的代码

System.Net.Sockets.SocketException:远程主机有时会强制关闭现有连接。

我们使用库Polly来自动重试HttpClient请求。

  • 我开始怀疑这是否与下面没有等待HttpClient.PostAsync有关
  • 这会导致连接耗尽吗

如有任何指导,我们将不胜感激。

var payload = JsonConvert.SerializeObject(data);
var response = await _pollyPolicy.ExecuteAsync(() => _httpClient.PostAsync(_endpoint, new StringContent(payload, Encoding.UTF8, "application/json")));

与我所说的相比;思考;应该是(注意添加了asyncawait(:

var payload = JsonConvert.SerializeObject(data);
var response = await _pollyPolicy.ExecuteAsync(async () => await _httpClient.PostAsync(_endpoint, new StringContent(payload, Encoding.UTF8, "application/json")));

这里显示的两个代码块实际上是相同的。在内部,Polly无论如何都会await代理,而Task上的多个await不会产生任何影响。

但是,如果您只使用Polly对HttpClient进行弹性HTTP调用,那么我会考虑使用库本身来处理它。这里有一些例子https://learn.microsoft.com/en-us/dotnet/architecture/microservices/implement-resilient-applications/implement-http-call-retries-exponential-backoff-polly

最新更新