簡體   English   中英

C#單例線程安全變量

[英]C# Singleton Thread-safe variables

我在這里引用了第六版的Jon Skeet的文章( http://csharpindepth.com/articles/general/singleton.aspx )。

但是,我有一些私有變量要初始化一次,並且可以由這個單例類中的方法使用。 我在私有構造函數中對其進行了初始化,但很快發現,在多線程方案( Task.Run )中,調用方法時它們為null。

調試時,我觀察到當我調出“實例”時,私有構造函數不會被調用兩次(應該是兩次),因此我假設我的私有變量在該時間點不應該為null(后續的“實例”調用)。

關於如何聲明,初始化和使用這些變量的任何想法?

public sealed class Singleton
{
    private static readonly Lazy<Singleton> lazy =
        new Lazy<Singleton>(() => new Singleton());

    public static Singleton Instance { get { return lazy.Value; } }

    // my private variables
    private readonly string _plantCode;

    private Singleton()
    {
       var appSettings = ConfigurationManager.AppSettings;
       string _plantCode = appSettings["PlantCode"] ?? "Not Found";
    }

    public SomeMethod() 
    {
      var temp = _plantCode; // <== _plantCode becomes null here!
    }

}

這就是問題:

string _plantCode = appSettings["PlantCode"] ?? "Not Found";

那不是分配給實例變量,而是聲明一個新的局部變量。 您只想要:

_plantCode = appSettings["PlantCode"] ?? "Not Found";

(順便說一句,這將在普通類中用相同的代碼發生-與單例無關。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM