2012-02-14 60 views
0

我在任务中有点新,必须在这里解决问题。我经常得到一个int和一个float(大约每10ms),它们最初是从一个常量数据流中过滤出来的,然后通过不同的算法进行处理。我想将它们堆叠到一个BlockingCollection中,以便为我的这些数据的进一步处理创建一个ConsumerProducer模式。我想启动几个生产者和消费者,但我被困在这里,因为我不知道如何处理这些不断的数据流。我的做法是这样的:从调用的方法启动生产者任务?

public void Store(int iChannel, float fValue) 
{ 
    producer = new Task(() => { BundleAndPutOnMyBlockingCollection(iChannel, fValue); 
} 

......很明显,这给了我任务的负荷,如商店()连续调用。我试着用mytask.status来做处理,但失败了。有人能给我一个提示如何处理这个问题?最好的是有一定数量的生产任务,例如100来测试。谢谢。

回答

0

好吧,你永远不会开始的任务,所以没有什么会永远以这种方式在阻塞集合中结束......但我不清楚为什么你会想要一个任务在这里。为什么你的Store方法不是直接将它添加到阻塞集合中?您可能需要消费者的任务,但这是另一回事。

+0

对不起,我忘了在上面的行写上.Start(),这个一定是来自另一个尝试在其他地方执行任务的地方。好吧,我只需要使用一个制作人 - 我想不管怎么说,这不会足以应付快速输入。谢谢,我会试试看。 – Rome 2012-02-14 08:58:52

+0

@罗姆:为什么不足以处理快速输入?你只是添加到一个集合 - 你不等待整个集合被处理。如果你担心自己最终会填满你的阻止集合(假设它是有限的),那么开始一项任务实际上不会对你有所帮助 - 如果你的数据生成速度比你消耗的速度快,那么你要去必须撤消或丢失数据。这是我们无法真正帮助你的决定。 – 2012-02-14 09:07:59