2012-05-14 71 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()