如果我必须同时对某个URL进行100次异步查询。 我的代码如下:
var tasks = requests.Select(x => httpClient.GetStringAsync(x)).ToList();
return Task.WhenAll(tasks);
我应该关心并发调用的限制吗?这意味着,不要同时创建100个任务,而要分块完成。关于这个主题的好文章是here。
我更喜欢依靠ServicePointManager.DefaultConnectionLimit
。
Windows操作系统限制出站连接的数量。看here。
因此,我正在创建100个任务,并且其中只有10个(默认为DefaultConnectionLimit)并行运行。
受How to limit the amount of concurrent async I/O operations?的启发。
答案 0 :(得分:2)
是的,您应该关注并发调用的限制;但仅根据用例。
底线:这取决于您的基础结构。
例如,如果您使用共享网络连接;从不同来源获取大量数据可能会阻塞您的网络。
另一个例子:在较大的块中,同时连接较少的情况下,写入网络服务器可能会更有效。
根据运行的位置,有必要知道正在执行多少个并行任务。
如果知道这一点,则可以在环境范围内对其进行调整以使其合理。这取决于硬件和可能的负载。...
这基本上是article中的意思,
最佳连接数取决于应用程序运行的实际条件。增加应用程序可用的连接数可能不会影响应用程序性能。为了确定更多连接的影响,请在更改连接数的同时运行性能测试。
如上所述,HttpWebRequest的默认值非常低。即使在家庭/消费者互联网连接上,这也将导致一个很好的“通用方法”场景。如果您的情况是:例如高性能服务器到服务器的通信,那么使用不同的值会更有意义。
关键是要了解环境/上下文及其功能。
然后,您可以确定大量的并行操作。
这就是为什么您必须关心它,有时会限制它的原因:-)