复合可观察对象

3

I have the following code:

Observable.FromEvent<ModelEventArgs>(
        h => ValuesController.ModelAdded += h,
        h => ValuesController.ModelAdded -= h)
    .Subscribe(m => context.Connection.Broadcast(m));

Observable.FromEvent<ModelEventArgs>(
        h => ValuesController.ModelDeleted += h,
        h => ValuesController.ModelDeleted -= h)
    .Subscribe(m => context.Connection.Broadcast(m));

更加清晰的做法是:

Observable.[SOMETHING](
        Observable.FromEvent<ModelEventArgs>(
                h => ValuesController.ModelAdded += h,
                h => ValuesController.ModelAdded -= h),
        Observable.FromEvent<ModelEventArgs>(
                h => ValuesController.ModelDeleted += h,
                h => ValuesController.ModelDeleted -= h))
    .Subscribe(m => context.Connection.Broadcast(m));

我似乎无法弄清楚那个[SOMETHING]需要什么,我不想等待ModelAdded完成,我只想让它们两个都为每个事件发出(m)。

请对我温柔一点,我是Rx的新手。


你可以尝试使用FromEventPattern,它更加简洁。 - Matthew Finlay
1
大多数文档使用 .FromEvent<T> 方法,我宁愿拥有类型安全性,也不愿为了节省一行代码而传递一个字符串。 - Joe Flateau
@JoeFlateau - 他们将名称从FromEvent更改为FromEventPattern,但随后以不同的目的重新引入了FromEventFromEvent用于非标准事件。 FromEventPattern用于标准模式。两者都有强类型重载可用。您应该使用FromEventPattern - Enigmativity
好吧...我有点喜欢我的小宝贝Action<T>,而不是大哥EventHandler<T>。 - Joe Flateau
@JoeFlateau - 抱歉,如果您正在使用 Action<T>,那么请务必使用 FromEvent。这就是它存在的原因。我假设您正在使用标准事件,因为有 ModelEventArgs 类名。 - Enigmativity
哦,@JoeFlateau,请您在评论中加上@Enigmativity,否则我一般是看不到您的回复的。刚好我刷新了页面才看到。 - Enigmativity
1个回答

7
我认为你正在寻找“合并”功能:

我认为你正在寻找 Merge 功能:

Observable.Merge(
        Observable.FromEvent<ModelEventArgs>(
                h => ValuesController.ModelAdded += h,
                h => ValuesController.ModelAdded -= h),
        Observable.FromEvent<ModelEventArgs>(
                h => ValuesController.ModelDeleted += h,
                h => ValuesController.ModelDeleted -= h))
    .Subscribe(m => context.Connection.Broadcast(m));

谢谢,我看到了,但是认为它没有起作用。事实证明,我的已删除广播正在默默地破坏SignalR,这就是为什么我没有捕捉到后续的广播。 - Joe Flateau

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接