加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用C#通知的生产者和消费者

发布时间:2020-12-16 01:42:57 所属栏目:百科 来源:网络整理
导读:我有一个生产者(P)将物品推入消费者(C). C可以决定在抵达后不立即消费所有物品;相反,它可以异步等待,直到队列中有n个项目或直到经过了某个时间间隔t,然后消耗队列中的所有项目并重新启动计时器. 每当推送到C的项目确实被消耗时,需要通知P.这是因为P在发生故
我有一个生产者(P)将物品推入消费者(C). C可以决定在抵达后不立即消费所有物品;相反,它可以异步等待,直到队列中有n个项目或直到经过了某个时间间隔t,然后消耗队列中的所有项目并重新启动计时器.

每当推送到C的项目确实被消耗时,需要通知P.这是因为P在发生故障时负责恢复(P将当前状态持续到DB).因此,在重新启动的情况下,P需要知道它需要再次推送哪些项目,因为它们尚未被消费者确认.

我的第一个想法是让C通过回调函数(委托)通知P:每当一个项目被消耗时,P的回调函数被调用一个消耗的项目列表.

但我想知道是否可能有其他(更好的)方式通知制片人.你的想法是什么?

斯特凡诺

更新:到目前为止,谢谢你的答案.我目前正在调查使用异步方法是否是一种优雅的方式来同步发布者和消费者关于正在发布的项目的状态.

解决方法

我认为你可以在没有C通知P的情况下实现你所需要的,但是使用事务性队列来提供C.
只是一个关于MSMQ实现的示例链接:

http://msdn.microsoft.com/en-us/library/ms978430.aspx,或者如果MSMQ不可用,纯BCL解决方案可以是:

https://rhino-tools.svn.sourceforge.net/svnroot/rhino-tools/branches/rhino-queues-1.0/(或至少只是为了从中获取一些想法)

编辑我将链接更改为关于MSMQ解决方案的更正式的链接.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读