我有一个带有两个私有列表的类(最初是空的)和一个在这些列表中进行一些搜索的Search
方法。我希望列表仅初始化一次并且线程安全。
对于这种情况,.NET中是否有类似于Lazy<T>
的构造?我可以将Init()
放在锁中,并使用一些标志来避免重复初始化,或者将Lazy<List<int>>
用于列表。
填写列表的逻辑很复杂,因此每个列表都不能有单独的方法
public class Myclass
{
private static List<int> list1;
private static List<int> list2;
static bool init=false;
private static object locker=new object();
private static void Init()
{
lock(locker)
{
if(init)
return;
// fill list1,
//fill list 2
init=true;
}
}
public static void Search(string query)
{
if(!init)
Init();
for(int i = 0; i < list1.Count; i++)
{
for(int j = 0; j < list2.Count; j++)
{
//
}
}
}
}