【发布时间】:2021-12-09 21:16:16
【问题描述】:
我有一个需要循环调用 Web 服务的 ASP.NET Core 应用程序。
我实例化了一个HostedService:
public class MyHostedService : IHostedService
{
public MyHostedService(IMyWebServiceClient MyWebServiceClient)
{
...
}
public Task StartAsync(CancellationToken cancellationToken)
{
while (!cancellationToken.IsCancellationRequested)
{
var result = await myWebServiceClient.CallSomeWebApi();
await Task.Delay(5000, cancellationToken);
}
return Task.CompletedTask;
}
}
从WebServiceClient 类中调用一些函数。类是这样的
public class MyWebServiceClient: IMyWebServiceClient
{
private readonly IHttpClientFactory httpClientFactory;
public MyWebServiceClient(IHttpClientFactory httpClientFactory)
{
this.httpClientFactory = httpClientFactory;
}
public async Task CallSomeWebApi()
{
using (var httpClient = httpClientFactory.CreateClient())
{
var requestMessage = new HttpRequestMessage(...);
var response = await httpClient.SendAsync(requestMessage);
}
}
}
启动代码是这样的:
public void ConfigureServices(IServiceCollection services)
{
....
services.AddHttpClient();
services.AddSingleton<IMyWebServiceClient, MyWebServiceClient>();
services.AddHostedService<MyHostedService>();
....
}
谁能告诉我循环调用是否是个好习惯
var httpClient = httpClientFactory.CreateClient()
(例如每 5 秒)?
会因此产生一些副作用吗?我正在使用一些 Web 服务器进行测试,并且经常遇到异常
由于配置的
HttpClient.Timeout已过 100 秒,请求被取消
这可能是由上面的实现引起的,还是这绝对是服务器问题?
【问题讨论】:
标签: c# asp.net-core httpclient webservice-client httpclientfactory