如何用无限循环实现单例模式 - C#

Nic*_*aro 3 c# singleton garbage-collection mutex

我目前正在使用C#中的应用程序,该应用程序在其他方法调用的每次迭代之后使用Thread.Sleep调用在无限循环上运行.我的主要是 -

static void Main(string[] args)
    {
        bool isOnlyInstance = false;
        Mutex mutex = new Mutex(true, "RiskMetricsSensitivitiesDatabaseLoader", out isOnlyInstance);

        if (!isOnlyInstance)
        {
            return;
        }

        while (true)
        {
            ProcessData();
            Thread.Sleep(MainLoopSleep);
        }

        GC.KeepAlive(mutex);
    }
Run Code Online (Sandbox Code Playgroud)

我已经在方法的末尾插入了KeepAlive调用,以确保单个互斥锁按预期工作,如各种网站所述.对KeepAlive的调用应该可以防止垃圾收集丢弃互斥锁,因为.NET期待预期/优化垃圾收集.

我的问题是,因为实际上对KeepAlive的调用永远不会到达,所以我应该在Thread.Sleep之后将它放在循环中吗?编译器警告KeepAlive永远不会被调用,我担心它会在我的垃圾收集防止算法中忽略这一行.

P D*_*ddy 10

Mutex是一次性的.为什么不包装using

using(new Mutex(blah, blah, blah)){
    while(true){
        Blah(blah);
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,这甚至不会将新指定给Mutex命名变量.