c# - 控制任务的实际并发性

标签 c# .net multithreading concurrency task-parallel-library

在某些情况下,我希望能够在使用任务时控制实际的并发度。

一个很好的例子就是编写一个小型客户端来对服务器端 API 进行负载测试。在那种情况下,我希望随时有 X 个并发请求。

现在,如果我使用 TPL,我只能设置最大并行度,这是不一样的。 我考虑过使用长时间运行的任务,但从我读到的内容来看,这是不推荐的:

https://social.msdn.microsoft.com/Forums/en-US/8304b44f-0480-488c-93a4-ec419327183b/when-should-a-taks-be-considered-longrunning?forum=parallelextensions

当然我可以使用线程而不是任务,但如果有一个选项可以使用 TPL 实现实际并发,我会更喜欢它。

最佳答案

如果您想直接控制运行特定代码段的线程数,则不应使用 TPL。 TPL 在底层进行了优化,例如任务内联和工作窃取。即使您设法让正确数量的线程同时运行,您也可能不会产生预期的负载量。特别是如果任务大部分时间都在等待,例如在 http 或 wcf 请求中。

信号量可能就足够了。

关于c# - 控制任务的实际并发性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39870966/

相关文章:

c - 分离的线程不会同时运行

JavaFX - 从另一个线程更新 TextArea 并缺少迭代

java - Tomcat关闭时关闭SMTPAppender的线程池

C# HTMLAgilityPack 获取内容 <script>

c# - DropDownList 不调用 SelectedIndexChanged?

c# - 将List <int?>转换为List <int>

c# - 为什么 var 评估为 int 而不是 double?

.net - 托管 C++ 中的数组初始化错误(跟进)

c# - 使用 Entity Framework、Code First (POCO) 和 Code Contracts 运行更新数据库时出错

c# - 条件取消引用运算符在 C# 中会是一件好事吗?