【问题标题】:HttpClient gets stuck on async taskHttpClient 卡在异步任务上
【发布时间】:2020-09-30 01:43:16
【问题描述】:

我有一个 HttpClient,我正在使用以下代码根据远程服务器上的文件提取流。当线程到达第三个等待时,它会在那里暂停很长时间。如果文件的大小妨碍它们分别为 33347 kb、123665 kb 和 178688 kb,但我怀疑是这种情况,因为最后两个的大小相似。

// a property in a class
private HttpClient HttpClient { get; set; } = new HttpClient() { Timeout = TimeSpan.FromMilliseconds(-1) };

// in a function in that class
using Stream stationsStream = await HttpClient.GetStreamAsync("https://eddb.io/archive/v6/stations.jsonl");
using Stream systemsStream = await HttpClient.GetStreamAsync("https://eddb.io/archive/v6/systems_populated.jsonl");
// always gets stuck on the third await no matter the order.
using Stream listingStream = await HttpClient.GetStreamAsync("https://eddb.io/archive/v6/listings.csv"); 

我没有过多使用 HttpClient 类,但提出的一些理论是 API 只允许两个连接,或者 HttpClient 只能接受两个。

【问题讨论】:

  • 您是否考虑在任何时候从这些流中实际读取任何内容?
  • @CaiusJard 是的,我有 3 个异步任务需要从流中读取数据。

标签: c# dotnet-httpclient


【解决方案1】:

我需要用HttpClientHandler 创建HttpClient 并将HttpClientHandler 传递给HttpClient 的构造函数,同时将HttpClientHandlerMaxConnectionsPerServer 更改为更大的数字。例如:

private HttpClient HttpClient { get; set; } = new HttpClient(Handler) { Timeout = TimeSpan.FromMilliseconds(-1) };
private static HttpClientHandler Handler { get; set; } = new HttpClientHandler() { MaxConnectionsPerServer = 3 };

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-16
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多