在 Rx 中,Subject 在现实生活中的用途是什么?我在 101 个样本中找到了一个样本,但我认为这并没有让我清楚地知道在哪里应用它。请任何人发布一些简单的示例来演示 Rx 中主题的工作。我在 Windows Phone 的上下文中使用它。
问问题
186 次
2 回答
7
Subject<T>
是List<T>
Rx 的 - 它只是一个 IObservable,您可以手动发出信号:
var subj = new Subject<int>();
subj.Subscribe(Console.WriteLine);
subj.OnNext(4);
subj.OnNext(5);
subj.OnCompleted();
>>> 4
>>> 5
它对于“包装”使用非 Rx 模式的异步方法非常有用,例如回调或 APM。从我的书中查看这个例子。
于 2012-05-14T17:51:11.433 回答
1
当前的指导是您应该避免在代码库中使用主题。好吧,这就是我的意见,我最近让 Bart De Smet(Rx 的作者)口头同意了这一点。
大多数时候我看到主题的使用,它可以替换为 Observable.Create<T>(IObserver<T>) 或另一个工厂,例如 FromEventPattern、Timer、FromAPM 等...
请参阅我关于此事的博客文章:
http://www.introtorx.com/Content/v1.0.10621.0/02_KeyTypes.html
http://www.introtorx.com/Content/v1.0.10621.0/18_UsageGuidelines.html
本指南有两个很好的例外:
- 如果您使用 BehaviorSubject<T> 作为属性的支持字段
- 当您使用 MultiCast 运算符时,使用 Subjects 可以提供您正在寻找的功能集......或者您只需使用像 .Replay()、.PublishLast() 这样的内置功能集
于 2012-07-06T13:58:50.920 回答