跨进程共享BlockingCollection

时间:2014-11-19 17:41:07

标签: c# ipc named-pipes producer-consumer inter-process-communicat

有没有办法在两个.net应用程序之间共享相同的BlockingCollection,一个应用程序生成新项目,另一个使用它们?

我发现的进程间通信选项似乎都涉及序列化和反序列化数据,所以如果我将BlockingCollection从一个进程传递到另一个进程,我将获得一个断开连接的副本,并对原始集合进行后续更新不会影响副本。

与回调或信号量相比,使用BlockingCollection确实简化了生产者 - 消费者关系,因此如果可能的话,我希望在进程之间交换数据时继续使用它们。

(BlockingCollection的语义是:
生产者可以简单地将新项目添加到集合中,而无需担心额外的锁定或同步 消费者可以简单地迭代集合,当迭代器没有新项目时,无论何时生成新项目,都会自动唤醒并取消阻止一个消费者

两个进程都将在同一台机器上运行。将生产者和消费者分成不同流程的目标之一是允许在生产者运行时重新启动或修改消费者。理想情况下,我正在寻找一种解决方案,让生产者不必了解消费者。

1 个答案:

答案 0 :(得分:0)

根据您的要求的描述(即您的制作人添加了项目而消费者在添加项目之前一直在睡觉),我建议使用MSMQ。

将消息添加到队列的一个进程,另一个正在等待新消息可用的进程。等待线程将被阻止,直到有消息可用(不使用轮询)。