Я использую код Singleton, который не является потокобезопасным и требует времени для запуска. Иногда он может вызываться одновременно несколькими пользователями, поэтому я использую Monitor для обработки очереди обработки запросов, как показано ниже:
bool lockWasTaken = false;
try
{
Monitor.TryEnter(lockObject, ref lockWasTaken); // returns lockWasTaken = true if it can get a lock
if (!lockWasTaken)
{
log.Warn("Locked by existing request. Request is queued.");
Monitor.Enter(lockObject, ref lockWasTaken); // Goes into the queue to access the object
}
// Do the Singleton processing
}
catch(Exception ex)
{
log.Fatal(ex);
}
finally
{
if (lockWasTaken)
{
Monitor.Exit(lockObject);
}
}
Это все работает хорошо. Но я хотел бы иметь возможность регистрировать, сколько запросов в очереди. Возможно ли это?