2012-05-14 47 views
1

Rx中Subject的真实用途是什么?我在101个样本中发现了一个样本,但我认为这并没有给我一个关于在哪里应用这个的清晰想法。请任何人发布一些简单的样本来展示Rx中的主题工作。我正在使用这个在Windows手机的上下文。Subject <T> in Rx

+4

你见过这篇文章:http://www.jeroenverhulst.be/post/2010/09/29/Exploring-Reactive-Extension%E2%80%99s -Subjectlt;送给Tgt;的.aspx? –

回答

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

当前的指导是你应该避免在你的代码库中使用主题。那么这是我的意见,我最近和Bart De Smet(Rx的作者)口头上同意这一点。

大多数时候我看到使用的主体,它可以与Observable.Create <Ť>(IObserver <Ť>)或另一个的工厂例如代替FromEventPattern,定时器,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操作符时,然后使用主题可以提供您正在查找的功能集......或者您只使用烘焙的功能集像.Replay(),.PublishLast()