在TPL中使用MaxDegreeOfParallelism

时间:2018-06-26 12:44:01

标签: c# .net task-parallel-library

我们在其中一个将文件并行上传到服务器的应用程序中实现了TPL(C#)。当我们尝试将MaxdegreeOfParallism设置为4并行上传15个文件时,仅上传12个文件,而没有上传3个文件。我们将MaxDegreeOfParallelism更改为2,然后上传了14个文件。我不确定MaxDegreeOfParallelism如何工作。任何人都可以澄清一下MaxDegreeOfParallelism的使用以及不处理文件的原因是什么。

我的代码

Parallel.ForEach(fileCollection,new ParallelOptions{ MaxDegreeOfParallelism = 2 },
            number => { fileNumber = UploadFile(file, response); });

上传功能会将文件上传到AmazonS3。

当我们使用MaxDegreeOfParallelism = 1上传文件时,所有文件都会正确上传,而当我们将MaxDegreeOfParallelism更改为2时,只有15个文件上传了14个文件;如果更改为4个,则只有12个文件上传了。

我的开发系统是四核窗口10。

2 个答案:

答案 0 :(得分:-1)

我找到了问题并解决。这不是MaxDegreeOfParallelism中的问题,而是代码问题。我找到并修复。谢谢您的支持。

答案 1 :(得分:-2)

除非您提供一些将其放在上下文中的代码,否则就很难知道您需要什么帮助,但是通常,MSDN文档中总结了MaxDegreeOfParallelism。

我的理解是,它用于将并发任务的数量限制为小于默认值(即可用线程的数量)的数量。如果您正在查看文件上传,那可能不一定与您所关心的Web请求数量相对应。

https://msdn.microsoft.com/en-us/library/system.threading.tasks.paralleloptions.maxdegreeofparallelism(v=vs.110).aspx

  

MaxDegreeOfParallelism属性影响并发数量   通过此方法的并行方法调用运行的操作   ParallelOptions实例。属性值正可限制数量   并发操作数达到设定值。如果为-1,则没有   限制并发运行的操作数。

     

默认情况下,For和ForEach将利用许多线程   基础调度程序提供的功能,因此可以将MaxDegreeOfParallelism从   默认值仅限制将使用多少个并发任务。