Consumer线程如何将结果返回到正确的Producer线程?

时间:2013-04-16 02:05:01

标签: c# multithreading concurrency

我有多个生产者线程将数据排入线程安全的“命令优先级队列”。

一个“命令阅读器”消费者线程,它将不断检查数据的“命令优先级队列”,使其出列,并进行必要的处理。最终在每次处理之后,结果需要返回到发出命令的正确生产者线程。

我曾想过有另一个线程安全的“结果队列”来排队结果,但问题是如何将数据推送到相关的生产者线程?

或者我可以尝试其他任何优雅的解决方案/机制或架构吗?

谢谢。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

我通常做的是将'OnCompletion'事件(或Task类OnCompletion函数覆盖)添加到排队到线程的数据对象中。当任何线程最终完成数据的工作已经完成时,它将数据对象作为参数调用'OnComplete'。在排队数据对象之前,原始生产者线程可以将OnComplete'事件(或覆盖方法)设置为想要的任何函数。

'OnCompletion'事件可能表示生成器线程在排队任务(等同)后等待的事件,或者它可能将任务对象排队到生成器线程的私有'returnedData'阻塞队列,所以它可以在生产者绕过它时出队并处理,(异步)。

编辑:数据/任务对象应该包含异常和/或errorMessage成员,这样,如果线程遇到数据问题,它可以在调用'OnCompletion'之前适当地设置它。这允许生产者线程看看是否有任何问题。