簡體   English   中英

C#單例實例永遠不會為空

[英]C# singleton instance is never null

我試圖在Azure webjob中實現單例模式。 在本地調試實例永遠不會為null。 它始終設置為單例對象本身。 我覺得我在這里遺漏了一些殘酷的東西。

public sealed class HubErrorList
{
    private static volatile HubErrorList instance;
    private static object syncRoot = new Object();

    private HubErrorList() {}

    public static HubErrorList Instance
    {
        get {
            if (instance == null)
            {
                lock (syncRoot)
                {
                    if (instance == null)
                    {
                        instance = new HubErrorList();
                    }
                }
            }
            return instance;
        }
    }
}

在訪問該屬性之前,該實例將保持為null。 根據您檢查的方式,您的工具可能會導致這種差異。

話雖這么說,一個更簡單,更好的“懶惰初始化”單例模式將是使用Lazy<T>代替:

public sealed class HubErrorList
{
    private static Lazy<HubErrorList> instance = new Lazy<HubErrorList>(() => new HubErrorList());
    private HubErrorList() {}

    public static HubErrorList Instance { get { return instance.Value; } }
}

暫無
暫無

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

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