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);
            }
        }