[英]Parallel.ForEach, Task.Factory and N threads
我知道之前已经有人问过这个问题,但我仍然不知道在这种情况下该使用什么。
我需要针对一个我知道一次可以处理16个请求的Web服务进行100次调用(不是,如果获得更多请求,它将失败)
我认为Parallel.ForEach适用于更底层的CPU密集型调用-它将决定最适合多少线程。 Task.Factory使用线程池,因此线程数可能少于16(更多)
当然,我可以编写自己的线程池,但是在这种情况下没有更明显的选择吗?
我会用Parallel.ForEach
但指定ParallelOptions
与MaxDegreeOfParallelism
设置为16,你给你想要的并行度的非常明确地表明这种方式。
如果您使用Task.Factory
我认为可以假设您将获得16个以上的并发任务,尽管如果您使用异步IO,则无论如何都不需要16个并发线程 。
您可能想看一下TPL数据流 -我没有专门研究如何轻松划分使用者,但是由于它直接针对生产者/消费者方案,因此如果您无法创建16个使用者,我会感到惊讶。只需拨打100个电话。
或者,当然,您可以创建全部使用相同BlockingCollection
16个线程,其中包含100个调用的数据。 这样可以保证并行度。
请注意,为了实际在同一时间对同一HTTP主机同时进行16个调用,您可能需要调整app.config的<connectionManagement>
部分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.