合并依赖的IObservable

时间:2018-01-03 21:21:02

标签: c# system.reactive

我无法组合两个依赖的Observable(意味着需要一个序列的结果作为另一个序列的输入)。

我有两种方法:

  • 方法1返回IObservable<List<Message>>
  • 方法2返回IObservable<ExtraInfoOfMessage>(带输入参数Message

对于方法1返回的每条消息,我必须执行方法2并将结果添加到Message对象。

我知道有CombineLatestZip等方法。但在我看来,所有这些方法都结合了不依赖的序列(意味着一个序列的结果不需要能够执行第二个序列)。

IObservables这可能吗?有人能给我一个如何解决这个问题的开始吗?

1 个答案:

答案 0 :(得分:1)

所以,如果我明白了,你的签名就像这样:

IObservable<List<Message>> Method1()

IObservable<ExtraInfoOfMessage> Method2(Message parameter)

而且,您的消息如下所示:

public class Message
{
    public ExtraInfoOfMessage ExtraInfoOfMessage { get; set; }
}

然后你可以这样做:

Func<Message, ExtraInfoOfMessage, Message> combine = (m, e) =>
{
    m.ExtraInfoOfMessage = e;
    return m;
};

IObservable<Message> query =
    from messages in Method1()
    from message in messages
    from extra in Method2(message)
    select combine(message, extra);

如果您希望查询返回消息列表,请执行以下操作:

IObservable<IList<Message>> query =
(
    from messages in Method1()
    from message in messages
    from extra in Method2(message)
    select combine(message, extra)
).ToList();