RX IObservable作为管道

时间:2010-02-11 09:08:38

标签: c# .net workflow system.reactive pipeline

目前,我正在使用RX Framework来实现类似工作流的消息处理管道。基本上我有一个消息生成器(反序列化网络消息并在Subject上调用OnNext())并且我有几个消费者。

注意:如果和transform是扩展方法,我编写的只是返回一个IObservable。

消费者会做类似以下的事情:

 var commerceRequest = messages.Transform(x => GetSomethingFromDatabase(x)
                              .Where(y => y.Value > 5)
                              .Select(y => y.ComplexObject)
                              .If(z => z.IsPaid, respond(z))
                              .Do(z => SendError(z));

commerceRequest然后由另一个类似的管道消耗,并且一直持续到顶部,在最后一个管道上调用Subscribe()的人结束它。我遇到的问题是来自基站的消息不会传播,除非直接在某处调用消息订阅。

如何将邮件推送到堆栈顶部?我知道这是一种非正统的方法,但我觉得它使代码很容易理解消息发生了什么。如果你认为这是一个非常可怕的想法,有人可以提出另一种做同样的方法吗?

1 个答案:

答案 0 :(得分:1)

如果没有订阅者,他们为什么要通过管道?如果你的一个中间步骤对它们的副作用有用(即使没有其他订阅者你也希望它们运行),你应该将副作用操作重写为订阅者。

如果你想继续使用链条,你也可以将副作用作为传递操作(或者如果你愿意的话,开球)。