我有以下代码:
public static ConcurrentBag<MyClass> all = new ConcurrentBag<MyClass>();
public static void Load()
{
all.Add("first");
all.Add("second");
all.Add("third");
all.Add("fourth");
foreach (MyClass item in all)
{
item.Load();
}
}
是否可以保证我的收藏中有一次“第一个”项目(需要)?
我可以这样迭代吗,还是需要使用Parallel.ForEach?
答案 0 :(得分:1)
不能保证元素是唯一的:
“当订购无关紧要时,袋子可用于存储对象,与套子不同,袋子支持重复。”
答案 1 :(得分:0)
根据您的评论,您想要一个单例集合,并且您似乎希望在第一次调用时加载它,我使用Lazy创建了一个解决方案。除了ConcurrentBag,您还可以使用ImmutableList。
using System;
using System.Collections.Concurrent;
public class MyClass
{
public MyClass(string description)
{
}
public void Load()
{
}
}
public class MyClassLoader
{
public static Lazy<ConcurrentBag<MyClass>> allLazy = new Lazy<ConcurrentBag<MyClass>>(() =>
{
ConcurrentBag<MyClass> bag = new ConcurrentBag<MyClass>();
bag.Add(new MyClass("first"));
bag.Add(new MyClass("second"));
bag.Add(new MyClass("third"));
bag.Add(new MyClass("fourth"));
foreach (MyClass item in bag)
{
item.Load();
}
return bag;
}
);
public static void Load()
{
foreach (MyClass item in allLazy.Value)
{
// Do whatever you want
}
}
}