【发布时间】:2020-10-11 09:49:37
【问题描述】:
我有 asp 核心应用程序。我将 IHostedService 用于定期任务。我需要定期发送 http 请求。这是我的代码:
class MyService: IHostedService
{
private readonly IServiceScopeFactory _scopeFactory;
public MyService(IServiceScopeFactory scopeFactory)
{
_scopeFactory = scopeFactory;
}
private async void DoWork(object state)
{
using (var scope = _scopeFactory.CreateScope())
{
var clientFactory = scope.ServiceProvider.GetRequiredService<IHttpClientFactory>();
var request = new HttpRequestMessage(HttpMethod.Get,
"https://api.github.com/repos/aspnet/AspNetCore.Docs/branches");
request.Headers.Add("Accept", "application/vnd.github.v3+json");
request.Headers.Add("User-Agent", "HttpClientFactory-Sample");
var client = clientFactory.CreateClient();
var response = await client.SendAsync(request);
...
}
}
}
我还在我的 Startup.cs 中添加了它
services.AddHttpClient();
这是有效的。但我不确定这是否是最佳性能解决方案。有什么建议吗?
【问题讨论】:
-
据我所知,services.AddHttpClient会将服务注册为Singleton而不是作用域,也就是说不需要将服务创建为作用域,我们可以直接在DoWork中使用.您能告诉我为什么将服务注册为范围吗?此外,您似乎只是在应用程序启动时调用了一次后台服务。请告诉我您将在后台服务中发送多少个请求。
-
我是 asp 核心的新手。这是我在网上找到的一个例子。我该怎么做?
-
在我看来,没有必要再使用
scope.ServiceProvider.GetRequiredService注入IHttpClientFactory,你可以使用下面的例子来达到你的要求。
标签: asp.net-core .net-core asp.net-core-mvc asp.net-core-webapi