我们在其中一个将文件并行上传到服务器的应用程序中实现了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。
答案 0 :(得分:-1)
我找到了问题并解决。这不是MaxDegreeOfParallelism中的问题,而是代码问题。我找到并修复。谢谢您的支持。
答案 1 :(得分:-2)
除非您提供一些将其放在上下文中的代码,否则就很难知道您需要什么帮助,但是通常,MSDN文档中总结了MaxDegreeOfParallelism。
我的理解是,它用于将并发任务的数量限制为小于默认值(即可用线程的数量)的数量。如果您正在查看文件上传,那可能不一定与您所关心的Web请求数量相对应。
MaxDegreeOfParallelism属性影响并发数量 通过此方法的并行方法调用运行的操作 ParallelOptions实例。属性值正可限制数量 并发操作数达到设定值。如果为-1,则没有 限制并发运行的操作数。
默认情况下,For和ForEach将利用许多线程 基础调度程序提供的功能,因此可以将MaxDegreeOfParallelism从 默认值仅限制将使用多少个并发任务。