ThreadInfo DataThread(Func <object> generateData, Action <object> callback, QueueCategory queueCategory, QueuePriority queuePriority)
    {
        object     data            = generateData();
        ThreadInfo queueThreadInfo = new ThreadInfo(callback, data);

        lock (categorizedQueues[queueCategory][(int)queuePriority])
        {
            categorizedQueues[queueCategory][(int)queuePriority].Enqueue(queueThreadInfo);
        }

        return(queueThreadInfo);
    }
    public static ThreadInfo RequestData(Func <object> generateData, Action <object> callback, QueueCategory queueCategory = QueueCategory.Default, QueuePriority queuePriority = QueuePriority.High)
    {
        ThreadInfo queueThreadInfo = new ThreadInfo();

        ThreadStart threadStart = delegate { queueThreadInfo = Instance.DataThread(generateData, callback, queueCategory, queuePriority); };

        new Thread(threadStart).Start();

        return(queueThreadInfo);
    }