2

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

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

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

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

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

4

1 回答 1

1

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

'OnCompletion' 事件可以表示生产者线程在将任务排队后等待的事件(同步),或者它可以将任务对象排队到生产者线程的私有“returnedData”阻塞队列中,以便它可以每当生产者处理它时,就被出列并处理(异步)。

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

于 2013-04-16T09:48:05.903 回答