方法的延迟初始化

时间:2019-11-07 13:08:14

标签: c# .net thread-safety

我有一个带有两个私有列表的类(最初是空的)和一个在这些列表中进行一些搜索的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++)
            {
                //
            }
        }
    }
}

0 个答案:

没有答案