C# Parallel.ForEach,限制同时连接

C# Parallel.ForEach,限制同时连接,c#,.net,parallel.foreach,C#,.net,Parallel.foreach,我有一个文件集合,我需要并行处理它们。处理过程包括最后一步将每个文件上载到FTP服务器。该服务器上的同时连接数限制为2。我使用的Parallel.Foreach()如下: Parallel.ForEach(files, options, ProcessFile); 通过传递到Parallel.ForEach ParallelOptions options = new ParallelOptions { MaxDegreeOfParallelism = 2 }; 我不会超过允许的连接数?我已经

我有一个文件集合,我需要并行处理它们。处理过程包括最后一步将每个文件上载到FTP服务器。该服务器上的同时连接数限制为2。我使用的
Parallel.Foreach()
如下:

Parallel.ForEach(files, options, ProcessFile);
通过传递到
Parallel.ForEach

ParallelOptions options = new ParallelOptions { MaxDegreeOfParallelism = 2 };

我不会超过允许的连接数?我已经读了很多关于
Parallel.ForEach
如何工作的书,但我仍然不确定。我认为,我是FTP服务器的唯一一个用户,在中,每个连接都被正确关闭。

< P>是的,这将确保您最多同时运行两个任务。假设没有其他进程或任务正在向该服务器进行任何上载,您应该不会有问题


我建议在foreach循环中使用一个信号量,因为这样实际的处理可以同时完成两个以上的任务。如果处理是花费时间最多的部分,这将提高性能

连接限制:是总连接数吗?还是“每个呼叫节点”连接?如果是前者,您需要非常确定它不会在其他任何地方运行。在后者中,您仍然需要知道这个操作是否可以在应用程序中一次执行两次。@MarcGravel Total。每次调用都会打开一个新连接,并在上传文件后将其关闭。我的观点(“总数”)是:你知道你的应用程序只在一个节点上运行吗?@QuéPadre如果你能保证它在进程中只运行一次,并且进程不会运行多次,那么是:这就足够了。@QuéPadre这将违反
MaxDegreeOfParallelism
,所以理论上:不。如果你担心的话-信号量是你的朋友。我正是这样做的。处理的所有步骤都是并行运行的,但是当涉及到上传时,我使用了一个信号量。