0

我有一个以自定义类对象为键的字典和一个类队列

 ConcurrentDictionary<clsEFTOPConnection, Queue<clsEFTOPS>>();

这里是自定义clsEFTOPConnectionclsEFTOPS。如果它不在字典中,我会添加一个新队列。现在我想在每个队列上并行工作。我希望每个队列都被线程监视,并且每当执行入队操作时,特定线程应该在睡眠时唤醒并开始使项目出队。所以没有线程等于没有队列,每个线程都将充当其队列的观察者。我已经编写了下面的代码来实现它,但它没有按照我的需要运行

 public Queue<clsEFTOPS> CheckAlreadyExistingQueue(clsEFTOPConnection objEFTOPConnection, clsEFTOPS objJobQ)
        {
            Queue<clsEFTOPS> queue;

            // See if we have a queue
            if (!mHostQueues.TryGetValue(objEFTOPConnection, out queue))
            {
                // No queue for this Host, so create and cache
                queue = new Queue<clsEFTOPS>();
                objJobQ.Host = objEFTOPConnection.Host;
                objJobQ.PortNo = objEFTOPConnection.PortNo;
                objEFTOPConnection.socket_ = objJobQ.ReconnectSocket();
                queue.Enqueue(objJobQ);
                mHostQueues.TryAdd(objEFTOPConnection, queue);
                JobThrd = new Thread(() => DequeueJobs(queue, objEFTOPConnection));
                if (JobThrd.ThreadState != ThreadState.Running)
                    JobThrd.Start();
            }
            else
            {
                queue.Enqueue(objJobQ);
                if (queue.Count > 1)
                    JobThrd = new Thread(() => DequeueJobs(queue, objEFTOPConnection));
                else
                    DequeueJobs(queue, objEFTOPConnection);

                if (JobThrd.ThreadState != ThreadState.Running)
                    JobThrd.Start();
            }

            return queue;
        }
4

0 回答 0