繁体   English   中英

跨进程共享BlockingCollection

[英]Share a BlockingCollection across processes

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

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

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

(BlockingCollection的语义是:
生产者可以简单地将新项目添加到集合中,而不必担心额外的锁定或同步。
消费者可以简单地遍历整个集合,当迭代器没有新项目阻止时,每当产生新项目时,就会自动唤醒并取消阻止一个消费者)

这两个进程将在同一台计算机上运行。 将生产者和使用者分为不同过程的目标之一是允许使用者在生产者运行时重新启动或修改。 因此,理想情况下,我正在寻找一种解决方案,使生产者不必了解消费者。

基于对您的要求的描述(即您的生产者添加项目,而消费者正在睡觉直到添加项目),我建议使用MSMQ。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM