【问题标题】:Queue and While loop队列和 While 循环
【发布时间】:2013-03-12 04:29:12
【问题描述】:

我有 2 个线程,一个添加到 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;
         }
        } 

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

【问题讨论】:

    标签: c# multithreading queue


    【解决方案1】:

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

    【讨论】:

    • 那就更好了,还用 BlockingCollection,事情就简单多了,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2016-04-11
    • 2012-11-27
    • 2012-08-05
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    • 1970-01-01
    相关资源
    最近更新 更多