2014-06-20 7 views
7
Entsorgen auf Reactive Extensions (Rx) Thema

anrufen Ich bin der Reactive Extensions (Rx) Thema als direkter Ersatz für C# Veranstaltungen mit etwa so:Sollte ich <T>

public class MyClass 
{ 
    private Subject<string> subject; 

    public IObservable<string> WhenSomethingHappened 
    { 
     get { return this.subject.AsObservable(); } 
    } 

    private void OnSomethingHappened(string something) 
    { 
     this.subject.OnNext(something); 
    } 
} 

Beachten Sie, dass Ich rufe nie OnCompleted mein Thema. Soll MyClass IDisposable implementieren und this.subject.Dispose aufrufen? Dies würde bedeuten, dass jede Implementierung, die Subject verwendet, IDisposable implementieren sollte.

Der Grund, warum ich frage ist, dass das IDisposable-Muster ein bisschen wie eine Krankheit ist, wenn eine Sache es implementiert, muss alles, das es verwendet, es auch implementieren.

+1

MyClass und Subjekt werden während des gesamten Anwendungslebenszyklus "leben"? Möchten Sie Beobachter davon abmelden? – vvv

+0

Ja, tut es in meinem Fall. –

Antwort

10

Nein, Sie müssen das nicht wirklich tun. Wenn Sie sich Gedanken über Speicherauslastung und Lebensdauer machen, denken Sie darüber nach, Abonnements, nicht Subjects zu entsorgen.

+4

Wenn Sie den Quellcode für Betreff (https://github.com/Reactive-Extensions/Rx.NET/blob/master/Rx.NET/Source/System.Reactive.Linq/Reactive/Subjects/Subject.cs) Sie können sehen, dass es alle Beobachter durch eine DisposedObserver-Instanz ersetzt. Dies wird dann ausgelöst, wenn das Subjekt ein Ereignis ausgelöst hat. Technisch gesehen denke ich, es würde Hinweise auf alle Beobachter geben, aber das sollte wirklich geschehen, indem man seine Abonnements entsorgt, wie Paul oben sagt –

+0

Gute Antwort und Kommentar. Habe jeweils eine Stimme. Was ist, wenn Sie IDisposable trotzdem implementieren? Es scheint eine Menge von Objekten zu geben, die IDisposable implementieren, aber es wird empfohlen, dass sie niemals entsorgt werden. Der neue HttpClient ist ein weiteres Beispiel. –

Verwandte Themen