c# - RX.Net 中的 Subject 总是有害的吗?

标签 c# system.reactive reactive-programming

我正在和一位同事交谈,他向我指出了关于 subjects being considered harmful 的 SO 问题.但是,在两种情况下,我有一些非确定性代码,这些代码在任何其他方面似乎都不合理。

非标准事件:

 event handler(class, result)
 {
   subject.OnNext(result);
 }

 public delegate void _handler
   ([MarshalAs(UnmanagedType.Interface), In] MyClass class, 
    [MarshalAs(UnmanagedType.Interface), In] ResultClass result)

并行任务(不确定数量的任务全部并行运行,在不同时间开始):

 Task.Start(()=> ...).ContinueWith(prevTask => subject.OnNext(prevTask.result))

主题不会暴露,只能通过一个可观察对象。是否有另一条建议的路线不是大量的样板文件?

最佳答案

主题并不总是有害的。即使在 Rx 本身中也有许多合法的用途。然而,很多时候一个人去使用一个主题,已经有一个为该场景编写的强大的 Rx 方法(它可能在内部使用也可能不使用主题)。您的 2 个示例就是这种情况。查看 Task.ToObservable 和 Observable.FromEventPattern。

另一个常见的主题被滥用的情况是开发人员将一个流分成两部分。他们确信他们需要订阅流,并在回调中为新流生成数据。他们用一个主题来做到这一点。但通常他们应该改用 Select。

关于c# - RX.Net 中的 Subject 总是有害的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23862248/

相关文章:

c# - 自动使列适合垂直滚动条的 ListView

.net - 如何从 IObservable<A> 转换为 IObservable<B>

system.reactive - 当方法返回有延迟的值时如何重复该方法

java - Azure Java SDK v12 未异步下载文件

javascript - 使用 Bacon.js 切换按钮

c# - 使用 LINQ 表达式填充 DataGrid

c# - 选择合适的微 Controller 来连接 RFID 和用 C# 开发的软件

c# - 获取 HttpRequest 的底层套接字

c# - 我可以使用 Reactive Extensions 来控制仪器测试周期的时间吗?

java - 如何在 rxJava 中订阅不同的线程池