В настоящее время я работаю над приложением в 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 никогда не вызывается, и я обеспокоен тем, что поэтому он проигнорирует эту строку в моем алгоритме предотвращения сбора мусора.