Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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)下调用RESTAPI的次数超过100k次_C#_Multithreading_Parallel.foreach - Fatal编程技术网

C#控制台在多处理模式(Parallel.ForEach)下调用RESTAPI的次数超过100k次

C#控制台在多处理模式(Parallel.ForEach)下调用RESTAPI的次数超过100k次,c#,multithreading,parallel.foreach,C#,Multithreading,Parallel.foreach,我正在使用Parallel.ForEach以批处理模式调用rest api服务,比如一次调用1000个请求。 我的MaxDegreeOfParallelism设置为1000,但似乎系统一次只创建10-15个请求,尽管系统CPU利用率非常正常(15%) 是否有任何方法可以一次发出1000个请求,以避免在非阻塞模式下的大量等待时间。您缺少线程池线程。一个快速的解决方法是使用该方法增加初始工作人员池 更好的方法是异步调用RESTAPI。这样,在请求进行中对工作线程的需求将被消除。协调异步过程的一个优秀

我正在使用Parallel.ForEach以批处理模式调用rest api服务,比如一次调用1000个请求。 我的MaxDegreeOfParallelism设置为1000,但似乎系统一次只创建10-15个请求,尽管系统CPU利用率非常正常(15%)


是否有任何方法可以一次发出1000个请求,以避免在非阻塞模式下的大量等待时间。

您缺少
线程池
线程。一个快速的解决方法是使用该方法增加初始工作人员池


更好的方法是异步调用RESTAPI。这样,在请求进行中对工作线程的需求将被消除。协调异步过程的一个优秀工具是库。您可以看到此库的使用示例。

理智的web开发人员希望您一次调用他们的api 1000是什么?此外,TPL
ForEach
For
方法完全不适合此项工作,您实际上是在制作一个非常低效的线程池线程阻塞工具,因此任务调度器将对这些任务视而不见,并严重限制您的IO工作您需要研究异步和等待模式,为什么它是可伸缩的,以及它对IO工作的好处对于异步http(IO)请求使用
Parallel
/TPL可能有些过分。没有必要加速那些
任务
s。
var maxDegree = new ParallelOptions() { MaxDegreeOfParallelism = MaxDegreeOfParallelism };
        Parallel.ForEach(parsedLines, maxDegree, obj =>
        {


            processIndividualRecord(obj);

            var currentCount = Interlocked.Increment(ref paraaleCounter);
            if (currentCount % 100 == 0)
            {
                logger.Debug("Reaming records to process is:" + (parsedLines.Count - currentCount));
            }
        });
ThreadPool.SetMinThreads(1000, 10);