队列和While循环

时间:2013-03-12 04:29:13

标签: c# multithreading queue

我有两个线程,一个添加到一个Enqueue,另一个执行Dequeue并进行一些处理,

现在有时队列会变空,并且可能需要几分钟来填充一个元素,另一方面,如果数据是本地的,它可以有几百个元素,因此它混合了添加的本地数据快速和必须首先下载的数据。

现在如果我做了类似

的事情
While(queue.count > 0)
{  
    //lock denque and process
} 

它将退出循环并且线程将结束,另一方面如果我执行类似

的操作
While(queue.count > 0 && DownloaderThreadisRunning)
    {  
        //lock denque and process
    } 

我将遇到另一个问题,因为某些对象可能需要处理时间到Enqueue线程已经结束其作业的点,因此它不会进入循环。

我想到了像

这样的东西
While(queue.count > 0)
        {  
            //lock denque and process
         if(!DownloaderThreadisRunning && queue.Count==0)
         {
            break;
         }
        } 

但是有任何内置的解决方案来管理这些事情吗?

1 个答案:

答案 0 :(得分:2)

如果你可以使用ConcurrentQueue,那么你创建自己的制作人和消费者就会有更多的抽象。