2016-06-27 13 views
0

Ich habe ein Szenario, in dem ich übergeordnete Entitäten von einem API herunterladen und in einer Datenbank speichern. Ich möchte dann, sobald alle Eltern gerettet sind, ihre Kinder herunterladen und speichern.Verwirrt über Nebenwirkungen/ContinueAfter

Ich habe einige Kommentare darüber gesehen (oder missverstanden), dass dies ein Nebeneffekt ist, da ich das Ergebnis der übergeordneten Sicherungsoperation nicht an die gespeicherte untergeordnete Operation übergeben werde. Ich möchte einfach damit beginnen, wenn die Eltern gerettet werden.

Kann mir jemand den besten Weg erklären, dies zu tun?

Antwort

1

Vielleicht so etwas wie dies versuchen:

Observable 
    .Create<int>(o => 
    { 
     var parentIds = new int?[] { null }; 
     return 
      Observable 
       .While(
        () => parentIds.Any(), 
        parentIds 
         .ToObservable() 
         .Select(parentId => Save(parentId))) 
         .Finally(() => { /* update `parentIds` here with next level */ }) 
       .Subscribe(o); 
    }) 
    .Subscribe(x => { }); 

Diese effektiv ist eine Breiten erste Traversal aller Entitäten zu tun, speichern sie, wie es geht, aber eine einzige beobachtbare ausgibt, dass Sie abonnieren können.

+0

Ich bin auf dem richtigen Weg, danke. –