private void ProcessTaskQueue()
{
while (true)
{
// Logger.Verbose("ActionQueue {0} waiting", Name);
ManualHandle.WaitOne(); // waits until the door is open
while (true)
{
Action action;
lock (InternalQueue)
{
// Logger.Verbose("ActionQueue {0} got {1} action to process", Name, InternalQueue.Count);
if (InternalQueue.Count == 0)
{
ManualHandle.Reset(); // closes the door (non-signals the wait handle)
break;
}
action = InternalQueue.Dequeue();
// Logger.Verbose("ActionQueue {0} dequeued", Name);
}
try
{
action();
}
catch (Exception ex)
{
Logger.Error("ActionQueue {0} with exception ({1})", Name, ex);
}
}
}
}