在某些情况下,我希望能够在使用任务时控制实际的并发度。
一个很好的例子就是编写一个小型客户端来对服务器端 API 进行负载测试。在那种情况下,我希望随时有 X 个并发请求。
现在,如果我使用 TPL,我只能设置最大并行度,这是不一样的。 我考虑过使用长时间运行的任务,但从我读到的内容来看,这是不推荐的:
当然我可以使用线程而不是任务,但如果有一个选项可以使用 TPL 实现实际并发,我会更喜欢它。
最佳答案
如果您想直接控制运行特定代码段的线程数,则不应使用 TPL。 TPL 在底层进行了优化,例如任务内联和工作窃取。即使您设法让正确数量的线程同时运行,您也可能不会产生预期的负载量。特别是如果任务大部分时间都在等待,例如在 http 或 wcf 请求中。
信号量可能就足够了。
关于c# - 控制任务的实际并发性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39870966/