c# - 通过 Lambda Func 发出 Http 请求

标签 c# .net-core async-await dotnet-httpclient polly

我正在尝试通过将管理断路器 polly 策略的辅助函数发出 httpclient 请求。

我试着这样调用它

var response = clientFactory.MakeRequest(() => client.GetAsync("/"));

在客户端工厂内部,我定义了断路器策略,我正尝试使用该策略执行上述 lambda

public async Task<HttpResponseMessage> MakeRequest(Func<HttpResponseMessage> request)
{
     var response = policy.ExecuteAsync(() => request.Invoke());
     return response;
}

作为一个整体,我对 Lambda 相当陌生,将其作为函数传递会变得更加困惑。如何配置函数和第一行代码来执行客户端并返回 HttpResponseMessage ?我不认为Task<HttpResponseMessage>Func<HttpResponseMessage>是正确的

最佳答案

我建议您阅读一些关于 async/await(不是 lambda)的信息,因为这是理解如何实现它的关键。

https://learn.microsoft.com/en-us/dotnet/csharp/async

您正在使用异步编程,因此必须决定是要使用异步方法 MakeRequest 还是要使用同步方法。如果你想要同步(但是 - 不需要使用 ExecuteAsync。我想,有 Execute() 替代方案)简单写:

public HttpResponseMessage MakeRequest(Func<HttpResponseMessage> request)
  {
     var response = policy.ExecuteAsync(() => request.Invoke());
     return await response;
  }

如果你想要异步:

public async Task<HttpResponseMessage> MakeRequest(Func<HttpResponseMessage> request)
{
    var response = policy.ExecuteAsync(() => request.Invoke());
    return response;
}

public void MyMethodUsingAsync()
{
    var responsePromises = MakeRequest(() => {...});
    ///do some job wich will be done before response is retrieved (not waiting for it); and if you need it - use await
    var responseReceived = await responsePromises;
}

关于c# - 通过 Lambda Func 发出 Http 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45681917/

相关文章:

c# - 如何使用 Entity Framework Code First Fluent API 指定表名

c# - WPF 和 C# : Create an override for a datagrid within a user control?

c# - .NET Core 中的 String.Intern 方法在哪里?

c# - EF Core Oracle 时间戳与时区到 C# 中的 DateTime

c# - ASP.NET MVC 中的 HttpClient 单例实现

c# - ASP.Net MVC 4 我需要延迟执行

javascript - 如何在 forEach 函数上执行异步等待

c# - Epplus LoadFromText函数加载空行

c# - 带参数的 System.Threading.Timer TimerCallback 委托(delegate)?

.net - 具有单文件可执行文件的 .NET 5.0 Linux 中的原始程序集位置