我有多个生产者线程将数据排队到线程安全的“命令优先级队列”。
还有一个“命令阅读器”消费者线程,它会不断检查这个“命令优先级队列”中的数据,将其出队,并进行必要的处理。最终在每次处理之后,需要将结果返回给发出命令的正确生产者线程。
我曾想过使用另一个线程安全的“结果队列”来对结果进行排队,但问题是如何将数据推送到相关的生产者线程?
或者是否有任何其他我可以尝试的优雅解决方案/机制或架构?
谢谢。任何帮助将不胜感激。
最佳答案
我通常做的是将“OnCompletion”事件(或任务类 OnCompletion 函数覆盖)添加到排队到线程的数据对象。当任何线程结束对数据的处理已经完成时,它调用“OnComplete”并将数据对象作为参数。原始生产者线程可以将 OnComplete 事件(或覆盖方法)设置为在从数据对象排队之前想要的任何功能。
'OnCompletion' 事件可以指示生产者线程在排队任务后等待的事件,(同步),或者它可以将任务对象排队到生产者线程的私有(private)'returnedData'阻塞队列,所以只要生产者处理它,它就可以出列和处理(异步)。
编辑:数据/任务对象应该包含异常和/或错误消息成员,这样,如果线程遇到数据问题,它可以在调用“OnCompletion”之前适本地设置它。这允许生产者线程查看是否有任何问题。
关于c# - 消费者线程如何将结果返回给正确的生产者线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16027599/