消费者线程如何将结果返回给正确的生产者线程?

本文关键字:线程 生产者 返回 结果 消费者 | 更新日期: 2023-09-27 18:09:15

我有多个生产者线程将数据排队到一个线程安全的"命令优先队列"

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

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

或者有其他优雅的解决方案/机制或架构在那里我可以尝试?

谢谢。

消费者线程如何将结果返回给正确的生产者线程?

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

'OnCompletion'可以通知一个事件,生产者线程在等待任务队列后等待,(同步),或者它可以将任务对象排队到生产者线程的私有'returnedData'阻塞队列中,这样它就可以在生产者绕过它时退出队列并进行处理,(异步)。

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