C#中的并行编程

Alx*_*ndr 13 .net c# parallel-processing

我有兴趣了解C#.NET中的并行编程(不是所有要知道的东西,而是基础知识,也许还有一些好的实践),因此我决定重新编程我的一个名为ImageSyncer的旧程序.ImageSyncer是一个非常简单的程序,它所做的只是扫描一个文件夹,找到以.jpg结尾的所有文件,然后根据它们的拍摄日期计算文件的新位置(解析xif数据,或者其他它被称为).在生成位置之后,程序检查该位置的任何现有文件,如果存在,则查看要复制的文件的最后写入时间和文件"以其方式".如果它们相等,则跳过该文件.如果不是,则创建并匹配两个文件的md5校验和.如果没有匹配要复制的是被复制到一个新位置的文件(例如,如果它是被复制到"C:\ test.jpg放在"它复制到"C:\测试(1). jpg"而不是".此操作的结果将填充到包含两个字符串的struct-type队列中,即原始文件和要将其复制到的位置.然后迭代该队列,直到它为空并且复制文件.

换句话说,有4个操作:

1. Scan directory for jpegs  
2. Parse files for xif and generate copy-location  
3. Check for file existence and if needed generate new path  
4. Copy files
Run Code Online (Sandbox Code Playgroud)

因此,我想重写这个程序,使其成为并列,并能够同时执行多个操作,我想知道实现这一目标的最佳方法是什么.我想出了两个我能想到的不同模型,但它们中的任何一个都没有任何好处.第一个是并行化旧程序的4个步骤,以便当要执行第一步时,它在几个线程上完成,并且当完成整个步骤1时,开始步骤2.另外一个(我觉得更有趣,因为我不知道该怎样做到这一点的想法)是创建一种工人和消费者的模式,因此,当一个线程与步骤1中完成了一个又一个接管,并在执行第2步对象(或类似的东西).但正如所说,我不知道这些是否有任何好的解决方案.另外,我对并行编程知之甚少.我知道如何创建一个线程,以及如何让它执行一个以对象作为唯一参数的函数,我也曾经使用过BackgroundWorker类,但我对它们中的任何一个都不熟悉.

任何输入将不胜感激.

Mit*_*eat 6

几个选项:

[但正如@John Knoeller指出的那样,你给出的例子可能是顺序I/O界限]