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搞定
紀錄紀錄