【问题标题】:Producer/Consumer pattern in .NET.NET 中的生产者/消费者模式
【发布时间】:2014-02-17 18:12:06
【问题描述】:

我有一个tcp WCF 服务,该服务旨在计算某些价格并将它们放入队列中以供客户提取和显示。

我首先想到的是Producer/Consumer 模式。 WCF 服务生成价格并将它们放入队列中。然后,客户端将使用队列中准备好的任何工作项。

看着Albahari's BlockingCollection example,他如何解释生产者/消费者模式,我无法理解。

var pcQ = new PCQueue (1);
Task task = pcQ.EnqueueTask (() => Console.WriteLine ("Easy!"));

如果我在WCF service 上运行它,我已经将一个任务放入队列中等待处理,这很公平。但是一旦服务端的任务完成了,如何自动将价格推送给客户端呢?或者这不是我可以用tcp WCF 服务做的吗?

【问题讨论】:

标签: c# .net multithreading wcf .net-4.5


【解决方案1】:

对于您的问题,我可以考虑两种解决方案:

第一个:在您的任务中,您将推送逻辑用于在您的活动连接中发送结果,但是......您必须为此构建所有推送环境。

第二个:当你完成你的任务时,你可以将结果放在客户端的另一个端点中,并且在客户端中,你构建一个逻辑来询问服务器“你完成了我的任务吗?答案是什么? "

【讨论】:

    【解决方案2】:

    听起来您想使用 WCF 回调。

    Here 是一个可能有助于指导您完成您想做的事情的问题。

    生产者/消费者模式是有效的。在这种情况下,WCF 回调只是一个实现细节。

    【讨论】:

    • 感谢您的链接。不幸的是,这并不是我所想的。在他的示例中,他调用proxy.DoSomething();,然后服务器回调。那不是推送通知,它是拉动的回调。我觉得tcp不可能。我可能需要阅读那篇 MSMQ 文章。
    • 客户端只需调用Connect()单向操作即可。然后服务器可以简单地存储上下文,然后当哪个线程正在处理队列时,WCF 服务可以采用该价格并回调客户端上下文。我的观点是CallbackContract 是如何做到这一点的,而不是链接中的具体实现。是的,可重入调用不适用于您的情况。真的和聊天程序没什么区别。
    猜你喜欢
    • 2015-10-12
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 2018-10-10
    • 2011-07-27
    • 2012-01-28
    • 1970-01-01
    相关资源
    最近更新 更多