CONSUL問題修正(SINGLETON)

Lock 

最近在工作的時候發生了一些多執行續配合CONSUL的問題
解了以後發現singleton的重要
 

    static void Main(string[] args)
        {

            Task.Run(() => Console.WriteLine(ConfigStore.Amigo.CategoryIDs));
            Task.Run(() => Console.WriteLine(ConfigStore.Common.ApiPath2));
            Task.Run(() => Console.WriteLine(ConfigStore.Common.ApiPathByB2B2));
            Task.Run(() => Console.WriteLine(ConfigStore.Common.AuthAPIName));
            Task.Run(() => Console.WriteLine(ConfigStore.Common.CreateOrderToken));
            Task.Run(() => Console.WriteLine(ConfigStore.Common.JWTSecret));
            Task.Run(() => Console.WriteLine(ConfigStore.Common.LdapPath));
            Task.Run(() => Console.WriteLine(ConfigStore.Common.IsTestCase));
            Console.Read();
    }

以這段CODE來模擬同時間呼叫

原本的寫法 在建立的時候是這樣做

                    Console.WriteLine("中間");
                    if (signalled = mutex.WaitOne(2000))
                    {
                        Console.WriteLine("裡面");
                        if (instance == null)
                        {
                            Console.WriteLine("很裡面");
                            instance = new ConsulConfigStore();
                        }
                    }

發生了兩秒過去了 會讓NULL的物件繼續往前走
所以改回了這樣的寫法
 

                    Console.WriteLine("中間");
                    if (instance == null)
                    {
                        lock (o)
                        {
                            Console.WriteLine("裡面");
                            if (instance == null)
                            {
                                Console.WriteLine("很裡面");
                                instance = new ConsulConfigStore();
                            }
                        }

                    }

回歸用Lock搞定
紀錄紀錄