c# - 一次启动多少个异步(非多线程)操作?这是可配置的吗?

标签 c# .net task-parallel-library

  1. 例如,如果我打电话 WebClient.DownloadStringTaskAsync() 100 倍有多少任务实际上是并行处理的?
  2. 我可以配置它吗?或者我需要使用 List<Task> 来维护他们的号码和Task.WaitAny()
  3. 有没有一种简单的方法可以在调试器中查看它们的编号?
  4. 在这种情况下(处理大量异步任务),最佳实践是什么?

注意:我没有使用 Task.Run(),因此没有启动其他线程(据我所知)

最佳答案

并行度由我不完全理解的 ServicePoint 基础设施控制。默认限制为 ServicePointManager.DefaultConnectionLimit。这是每个人都使用的。我从未见过有人使用 ServicePoint

我建议禁用该限制并自行实现该限制。对整个 AppDomain 使用一个全局限制对我来说没有意义。它对 DefaultConnectionLimit 的依赖也是隐藏且无文档记录的。此外,DefaultConnectionLimit 默认为非常不同的默认值,具体取决于环境(2 与 int.MaxValue!)。

(4)有code floating around它允许您以一定程度的并行性异步处理一系列项目。这是要走的路。受控并行、异步和流处理,内存使用量恒定。

关于c# - 一次启动多少个异步(非多线程)操作?这是可配置的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31527793/

相关文章:

c# - ASP.NET MVC 中的 Task.Run 与 ContinueWith

c# - aspx 页面中的内联 C# 代码

c# - WCF REST - "Get"使用复杂类型

.net - 他们是与 Visual Studio 调试器集成的免费 .NET 反编译器吗

c# - WWSAPI 等效于 App.config 中的 C#/.net <serviceCertificate>

c# - 比较 char 忽略大小写的正确方法是什么?

task-parallel-library - TPL数据流操作 block 可以在故障后重置吗?

c# - 如何将 LambdaExpression 转换为类型化的 Expression<Func<T, T>>

c# - CheckedListBox 数据源突然不工作

c# - 为什么 block 按此顺序运行?