private void RunQueryThread() { for (; ;) { QueryQueueMutex.WaitOne(); while (QueryQueue.IsEmpty() && !EndQueryThread) { AnyOutstandingQuery.Wait(QueryQueueMutex); } if (EndQueryThread) { QueryQueueMutex.ReleaseMutex(); break; } var sig = QueryQueue.Pop(); QueryQueueMutex.ReleaseMutex(); QueryAsyncToCacheAndUpdate(sig); } }