首页 > 解决方案 > 通过 ASP.NET CORE WEB API 并发请求和共享 HttpClient

问题描述

如果我们像下面的 SingleHttpClientInstanceController 那样重用 HttpClient ,如果有多个请求进来,而当前请求正在使用共享的 HttpClient,这种情况会阻塞后续请求吗?

我有一个接受请求并调用外部 Web 服务的 Web API,如果调用外部 Web API 块,它会阻止所有即将到来的请求。

public class SingleHttpClientInstanceController : ApiController
{
    private static readonly HttpClient httpClient;

    static SingleHttpClientInstanceController()
    {
        httpClient = new HttpClient();
    }

    // This method uses the shared instance of HttpClient for every call to GetProductAsync.
    public async Task<Product> GetProductAsync(string id)
    {
        var hostName = HttpContext.Current.Request.Url.Host;
        var result = await httpClient.GetStringAsync(string.Format("http://{0}:8080/api/...", hostName));
        return new Product { Name = result };
    }
}

上面的代码来自下面的链接

https://docs.microsoft.com/en-us/azure/architecture/antipatterns/improper-instantiation/

标签: c#asp.net-coreasp.net-core-webapidotnet-httpclient

解决方案


推荐阅读