我正在检查一些似乎抛出的代码
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")));
与我所说的相比;思考;应该是(注意添加了async
await
(:
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