一次启动了多少个异步(非多线程)操作?这是可配置的吗?
How many asynchronous (not multi-threaded) operations are started at once? Is this configurable?
- 例如,如果我调用
WebClient.DownloadStringTaskAsync()
100 次,实际上并行处理了多少任务?
- 我可以配置它还是我需要使用
List<Task>
和 Task.WaitAny()
来维护他们的号码?
- 有没有一种简单的方法可以在调试器中查看它们的编号?
- 在这种情况下(处理大量异步任务),最佳实践是什么?
注意:我没有使用 Task.Run() 所以没有启动额外的线程(据我所知)
并行度由 ServicePoint
基础设施控制,我并不完全了解。默认限制为 ServicePointManager.DefaultConnectionLimit
。这是每个人都使用的。我从未见过有人使用 ServicePoint
.
我建议禁用限制并自行实施限制。对整个 AppDomain 使用一个全局限制对我来说没有意义。依赖 DefaultConnectionLimit
也是隐藏和未记录的。此外,DefaultConnectionLimit
默认为非常不同的默认值,具体取决于环境(2 与 int.MaxValue!)。
(4) code floating around 允许您以一定的并行度异步处理一系列项目。这是要走的路。受控的并行性、异步和流处理,具有恒定的内存使用率。
- 例如,如果我调用
WebClient.DownloadStringTaskAsync()
100 次,实际上并行处理了多少任务? - 我可以配置它还是我需要使用
List<Task>
和Task.WaitAny()
来维护他们的号码? - 有没有一种简单的方法可以在调试器中查看它们的编号?
- 在这种情况下(处理大量异步任务),最佳实践是什么?
注意:我没有使用 Task.Run() 所以没有启动额外的线程(据我所知)
并行度由 ServicePoint
基础设施控制,我并不完全了解。默认限制为 ServicePointManager.DefaultConnectionLimit
。这是每个人都使用的。我从未见过有人使用 ServicePoint
.
我建议禁用限制并自行实施限制。对整个 AppDomain 使用一个全局限制对我来说没有意义。依赖 DefaultConnectionLimit
也是隐藏和未记录的。此外,DefaultConnectionLimit
默认为非常不同的默认值,具体取决于环境(2 与 int.MaxValue!)。
(4) code floating around 允许您以一定的并行度异步处理一系列项目。这是要走的路。受控的并行性、异步和流处理,具有恒定的内存使用率。