gpt4 book ai didi

c# - 如何让多个线程处理相同的 IEnumerable 结果?

转载 作者:太空狗 更新时间:2023-10-29 18:19:14 24 4
gpt4 key购买 nike

我有一个返回 IEnumerable<string> 的方法这当然是用 yield return <string>; 处理的.我想让多个线程处理这个结果,当然不会重复它并且是线程安全的。我将如何实现这一点?

var result = GetFiles(source);

for (int i = 0; i < Environment.ProcessorCount; i++)
{
tasks.Add(Task.Factory.StartNew(() => { ProcessCopy(result); }));
}

Task.WaitAll(tasks.ToArray());

然而,这似乎产生了重复:

C:\Users\esac\Pictures\2000-06\DSC_1834.JPG
C:\Users\esac\Pictures\2000-06\DSC_1835.JPG
C:\Users\esac\Pictures\2000-06\.picasa.ini
C:\Users\esac\Pictures\2000-06\DSC_1834.JPG
C:\Users\esac\Pictures\2000-06\DSC_1835.JPG
C:\Users\esac\Pictures\2000-06\.picasa.ini
C:\Users\esac\Pictures\2000-06\DSC_1834.JPG
C:\Users\esac\Pictures\2000-06\DSC_1835.JPG
C:\Users\esac\Pictures\2000-06\.picasa.ini
C:\Users\esac\Pictures\2000-06\DSC_1834.JPG
C:\Users\esac\Pictures\2000-06\DSC_1835.JPG

最佳答案

您可以使用 Parallel.ForEach 方法轻松地做到这一点。

Write a Simple Parallel.ForEach loop

每次迭代都会在任务管理器中排队。执行完所有迭代后,循环将退出。

var result = GetFiles(source);

Parallel.ForEach(result, current => {
ProcessCopy(current);
});

Console.WriteLine("Done");

关于c# - 如何让多个线程处理相同的 IEnumerable 结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5087084/

24 4 0