9 Stimmen

Wie man ein IEnumerable<Task<T>> in IObservable<T> konvertiert

Gibt es einen integrierten Weg, um einen IEnumerable> in ein IObservable umzuwandeln. Die Reihenfolge spielt keine Rolle, es ist nur wichtig, dass ich die Dinge erhalte, am besten jedoch, wenn sie abgeschlossen sind.

Wenn es noch nicht existiert, wie könnte man es am besten erreichen?

7voto

Bryan Anderson Punkte 15626

Ich glaube, das wird funktionieren

tasks.Select(t => Observable.FromAsync(() => t))
     .Merge();

Jede Aufgabe sendet ihre Ergebnisse an die Observable-Sequenz in der Reihenfolge, in der sie abgeschlossen sind. Sie können sich an die Sequenz anmelden und auf diese Weise alles machen, was Sie mit den Ergebnissen möchten.

2voto

Enigmativity Punkte 104081

Du könntest es auf diese Weise machen:

var query = tasks.ToObservable().SelectMany(task => task.ToObservable());

Oder alternativ so:

var query =
    from t in tasks.ToObservable()
    from i in t.ToObservable()
    select i;

1voto

Khan Punkte 17058

Ich glaube, was du suchst, könnte Observable.Start() sein

Dann kannst du .Subscribe(callbackMethod) am Ende anhängen und bei Bedarf einen Rückruf angeben.

0voto

Dave Sexton Punkte 2473

Ab Rx 2.0 gibt es eine etwas einfachere Möglichkeit:

var query = tasks.ToObservable().Merge();

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X