Rx中的主题<t> </t>

时间:2012-05-14 10:25:43

标签: windows-phone-7 system.reactive reactive-programming

Rx中Subject的真实生活用途是什么?我在101个样本中找到了一个样本,但我认为这并没有让我清楚地知道应该在哪里应用它。请在任何一篇文章中展示一些简单的样本,以展示Rx中的主题作品。我在windows phone的上下文中使用它。

2 个答案:

答案 0 :(得分:7)

Subject<T>是Rx的List<T> - 它只是一个可以手动发出信号的IObservable:

var subj = new Subject<int>();
subj.Subscribe(Console.WriteLine);

subj.OnNext(4);
subj.OnNext(5);
subj.OnCompleted();

>>>  4
>>>  5

对于“包装”使用非Rx模式的异步方法(如回调或APM)非常有用。查看this example from my book

答案 1 :(得分:1)

目前的指导是您应避免在代码库中使用主题。嗯,这是我的观点,我最近有一个Bart De Smet(Rx的作者)在口头上同意这一点。

我大多数时候看到主题的使用,它可以用Observable.Create&lt; T&gt;(IObserver&lt; T&gt;)或另一个工厂代替,例如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&lt; T&gt;作为财产的支持领域
  2. 当您使用MultiCast运算符时,使用主题可以提供您正在寻找的功能集......或者您只是使用像.Replay(),。PostlishLast()
  3. 这样的功能集。