c# – 我可以在ConcurrentBag上使用正常的foreach吗?
作者:互联网
在我的代码的并行部分中,我将每个线程的结果保存到ConcurrentBag.但是,当这完成后,我需要遍历每个结果并通过我的评估算法运行它们.普通的foreach是否会遍历所有成员,还是需要特殊代码?我还想过使用像队列而不是包的东西,但我不知道哪个最好.行李通常在并行代码的末尾仅包含20个左右的项目.
即,实际上将访问并运行ConcurrentBag的所有成员的foreach?
ConcurrentBag futures = new ConcurrentBag();
foreach(move in futures)
{
// stuff
}
解决方法:
你不需要特殊的代码,C#的foreach会调用“GetEnumerator”which gives you a snapshot:
The items enumerated represent a moment-in-time snapshot of the
contents of the bag. It does not reflect any update to the collection
after GetEnumerator was called.
标签:c,foreach,parallel-processing,parallel-foreach-2 来源: https://codeday.me/bug/20190608/1201485.html