我目前正在使用 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);
}
我已在该方法的末尾插入 KeepAlive 调用,以确保单例互斥按预期工作,如各种网站所述。对 KeepAlive 的调用应该防止垃圾收集丢弃互斥量,因为 .NET 期待预期/优化垃圾收集。
我的问题是,由于从未到达对 KeepAlive 的实际调用,我是否应该将它放在 Thread.Sleep 之后的循环中?编译器警告 KeepAlive 永远不会被调用,我担心它会因此在我的垃圾收集预防算法中忽略这一行。
最佳答案
Mutex
是一次性的。为什么不将其包装在 using
中?
using(new Mutex(blah, blah, blah)){
while(true){
Blah(blah);
}
}
请注意,这甚至无需将新的 Mutex
分配给命名变量就可以工作。
关于c# - 如何使用无限循环实现单例模式 - C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2134693/