【问题标题】:C# Threadpool HttpClient Request [closed]C# Threadpool HttpClient 请求 [关闭]
【发布时间】:2018-01-23 18:48:34
【问题描述】:

我有一个不同网址的列表。 我想通过线程池获取这些 url。

我正在使用 ThreadPool.QueueUserWorkItem 方法。 这里的问题是我无法将异步 httpclient 调用作为 waitcallback 传递给此方法。它需要是同步的。实现这一点的最佳方式是什么?

【问题讨论】:

  • 你混合了 2 个东西,线程池和异步,选择一个。澄清一下,async 将使用它认为最好的线程为您有效地并行化您的工作
  • @pm100 您可以并行化一个异步操作,但它本质上不是并行的。您可以并且经常这样做,编写顺序异步操作。此外,异步并不意味着它正在使用其他线程。事实上,它通常不会。这是一个很好的例子。查询网站的数据不需要另一个线程来工作,它*不需要任何线程来工作
  • 您是会员四年了,还没有学会如何创建mcve?顺便问一下,这个问题和python-requests有什么关系?
  • @AleksAndreev 不是,我删除了标签。

标签: c# httpclient threadpool


【解决方案1】:

如果您想并行获取每个 URL 并异步等待它们全部完成,您只需为每个 URL 调用 HttpClient.GetAsync,然后将任务传递给 Task.WhenAll 以等待它们全部完成。

var urls = new[] { "http://google.com", "http://stackoverflow.com", "http://amazon.com" };
var httpClient = new HttpClient();
return Task.WhenAll(urls.Select(httpClient.GetAsync));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 2019-09-02
    相关资源
    最近更新 更多