编程语言
首页 > 编程语言> > c# – 我可以在ConcurrentBag上使用正常的foreach吗?

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