我正在开发一个Windows窗体应用程序(c#),并且在程序运行时,它创建的对象将它们添加到列表中。我必须用FIFO(先进先出)处理列表中的项目。我想在backgroundthread中做到这一点,我必须按顺序处理它们,编号1,编号2,编号3等等。只要一个项目被添加到列表中,我想处理它。所以我必须有一些东西来检查这个列表。BlockingCollection或队列<T>找工作?
达到此目的的最佳方法是什么?
我知道blockingcollection做了类似的事情,它在处理它之前等待要添加的项目。
我可以在队列中使用单个线程,并且只需要(true)并在有物品时使用物品?
您认为如何?
是的!我只是要求这个确认我的想法,如果有人有一个更好的主意:) – syncis
@Jonathan Beerhalter:或者,而不是调用'Take',他可以让他的后台线程在['GetConsumingEnumerable']上执行'foreach' (http://msdn.microsoft.com/en-us/library/dd287186.aspx),它将放置在“BlockingCollection”中的项目。 –
casperOne
@syncis:'GetConsumingEnumerable'将会阻塞,直到一个项目被添加到'BlockingCollection''就像'Take'将;事情是,除了处理这些项目,你的后台线程还有什么其他功能?如果您尝试保存线程;不,你基本上是重写线程池,这通常不是一个好主意。请注意,在您逐一处理您的项目时(或者您可以根据您的需要,将这些项目发送给其他线程处理),可以通过'GetConsumingEnumerable'获取更多项目。 –
casperOne