2013-03-12 98 views
0

我有2个线程一个增加一个入队和一个做的出列,并做一些处理,队列和While循环

现在有时队列会变成空的,它可能几分钟到一个elment填充它,另一方面,如果数据是本地的,它可以有几百个元素,所以它具有快速添加的本地数据和必须首先下载的数据的混合。

现在,如果我这样做

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

但THRE任何内置的解决方案来管理这样的事情?

回答

2

如果您可以使用ConcurrentQueue比创建自己的生产者和消费者有更多的抽象。

+0

多数民众赞成更好地使用它与BlockingCollection,事情更简单,谢谢! – user1590636 2013-03-12 05:27:10