如何在C#中刷新单例

Him*_*ack 6 c# asp.net singleton

我有从DB获取的单例,因此它是昂贵的负载.它是懒惰的.

我想创建一个方法来刷新该单例并在需要时填充它.

数据是DB而且非常昂贵,所以我想只刷一次,以防我有并发调用.(也就是说,如果我有500次调用刷新,我想只重启一次刷新)

public static PageData Instance
    {
        get
        {
            if (m_Instance == null)
            {
                lock (instanceLock)
                {
                    if (m_Instance == null)
                    {
                        m_Instance = new PageData();
                    }
                }
            }
            return m_Instance;
        }
    }


public void ReSync()
        {                         
            lock (instanceLock)
            {
                /* Setting to null to force the Instance to re-build */
                m_Instance = null;
                PageData pData = Instance;
            }
        }
Run Code Online (Sandbox Code Playgroud)

谢谢

Ada*_*rth 2

这有点不正确,你的

if (m_Instance == null)

确实应该在锁的内部。

抱歉,没发现这一点。

如果您已经在刷新,则内置的任何内容都不会导致其他客户端默默地放弃呼叫。我认为超时会产生异常。也许维护一个陈旧的日期时间,您可以检查它以避免对排队的调用者进行刷新。