簡體   English   中英

無功擴展 - 返回相同的可觀察或創建新的?

[英]Reactive extension - Return same observable or create new?

我試圖用Rx設計服務層抽象。 我使用FromAsyncPattern包裝了所有webservice調用。 我將有多個ViewModels訂閱這些observable,有些可以有多個訂閱。

  • Shoud我在我的ServiceProxy類(singleton)中創建readonly IObservable<T>屬性,並在構造函數中構造一次,還是應該每次在服務方法中創建新的observable並返回它們?

  • 有關系嗎 ?

有關系嗎 ?

在這種情況下,沒有。 這是可觀察(如Create返回)和可觀察之間的區別。 FromAsyncPattern返回一個AsyncSubject,這意味着它會將結果“重播”給任何訂閱者(因此,它很冷,但不是完全相同,更像'chilly')。

另一方面,創建將最終重新運行每個訂閱者的代碼(就像你有一個L2S查詢一樣,運行Foreach就會發出另一個數據庫調用)。 有時候這就是你想要的,有時卻不是。

要將Cold observable變為Hot observable,請將其添加到結尾:

.Multicast(new Subject<TTheType>()).RefCount();

如果你想采用熱觀察(如Observable.Start)並使其冷卻 ,請使用Defer:

var coldObs = Observable.Defer(() => 
    Observable.Start(() => doSomethingAndReturnAValue()));

這意味着,每當有人訂閱coldObs時,都會調用doSomethingAndReturnAValue。

您無法創建IObservalble<T>屬性來表示使用FromAsyncPattern創建的IObservable,因為此方法返回一個函數,該函數在使用適當的值調用時將返回IObservable<T> (其中T是原始基礎同步方法的返回類型)。 因此,您的Rx抽象層將具有將實際參數作為原始服務層方法但不返回T方法返回IObservable<T>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM