1

在 Rx 中,Subject 在现实生活中的用途是什么?我在 101 个样本中找到了一个样本,但我认为这并没有让我清楚地知道在哪里应用它。请任何人发布一些简单的示例来演示 Rx 中主题的工作。我在 Windows Phone 的上下文中使用它。

4

2 回答 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/04_CreatingObservableSequences.html#CreationOfObservables

http://www.introtorx.com/Content/v1.0.10621.0/18_UsageGuidelines.html

本指南有两个很好的例外:

  1. 如果您使用 BehaviorSubject<T> 作为属性的支持字段
  2. 当您使用 MultiCast 运算符时,使用 Subjects 可以提供您正在寻找的功能集......或者您只需使用像 .Replay()、.PublishLast() 这样的内置功能集
于 2012-07-06T13:58:50.920 回答