Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Parallel.ForEach、Task.Factory和N个线程_C#_Parallel Processing_Task - Fatal编程技术网

C# Parallel.ForEach、Task.Factory和N个线程

C# Parallel.ForEach、Task.Factory和N个线程,c#,parallel-processing,task,C#,Parallel Processing,Task,我知道之前已经有人问过并讨论过这个问题,但我仍然认为不清楚在这个场景中使用什么 我需要对一个我知道一次可以处理16个请求的web服务进行100次调用(并不是说如果它得到更多的请求就会失败) 我认为Parallel.ForEach适用于更低级别的CPU密集型调用—它将决定最适合多少线程。工厂使用线程池,因此线程数可以少于16个(也可以更多) 当然,我可以编写自己的线程池,但是对于这个场景,没有更明显的选择吗?我会使用Parallel.ForEach,但指定一个MaxDegreeOfParallel

我知道之前已经有人问过并讨论过这个问题,但我仍然认为不清楚在这个场景中使用什么

我需要对一个我知道一次可以处理16个请求的web服务进行100次调用(并不是说如果它得到更多的请求就会失败)

我认为Parallel.ForEach适用于更低级别的CPU密集型调用—它将决定最适合多少线程。工厂使用线程池,因此线程数可以少于16个(也可以更多)


当然,我可以编写自己的线程池,但是对于这个场景,没有更明显的选择吗?

我会使用
Parallel.ForEach
,但指定一个
MaxDegreeOfParallelism
设置为16的线程池。这样,您就可以非常清楚地表示您想要的并行度

如果您使用
Task.Factory
我认为假设您将获得超过16个并发任务是合理的,尽管如果您使用异步IO,您不需要16个并发线程

你可能想看看-我没有特别注意到划分消费者有多容易,但由于它直接针对生产者/消费者场景,如果你不能创建16个消费者,然后只生成100个电话,我会感到惊讶

当然,您也可以创建16个线程,所有线程都使用相同的包含100个调用数据的线程。这将保证并行性的水平


请注意,为了实际同时对同一HTTP主机进行16次调用,您可能需要调整app.config的部分。

我将使用
Parallel.ForEach
,但指定一个
MaxDegreeOfParallelism
设置为16的值。这样,您就可以非常清楚地表示您想要的并行度

如果您使用
Task.Factory
我认为假设您将获得超过16个并发任务是合理的,尽管如果您使用异步IO,您不需要16个并发线程

你可能想看看-我没有特别注意到划分消费者有多容易,但由于它直接针对生产者/消费者场景,如果你不能创建16个消费者,然后只生成100个电话,我会感到惊讶

当然,您也可以创建16个线程,所有线程都使用相同的包含100个调用数据的线程。这将保证并行性的水平


请注意,为了实际同时对同一HTTP主机进行16次调用,您可能需要调整app.config的部分。

您已经在线程方面犯了错误。理想情况下,您应该使用一个异步API使请求。。在这种情况下,您可以使用.net线程池中相当少的线程轻松地为响应提供服务。我会考虑从手头的任务中稍作休息,花些时间研究C/5/NET4.5所介绍的异步/等待范例。理想情况下,您应该使用一个异步API使请求。。在这种情况下,您可以使用.net线程池中相当少的线程轻松地为响应提供服务。我会考虑从手头的任务中稍作休息,花些时间研究C/5/NET4.5引入的异步/等待范例。