Ist es möglich das yield return Prinzip in einem API Controller zu etablieren?

Kokujou

Lieutenant
Registriert
Dez. 2017
Beiträge
929
Yaho!

Folgende Frage. Ich habe einen Backend-Controller der eine Liste erstellt. Dafür benötigt er aber sehr sehr viel Zeit. Etwa 1-2 Minuten bei 100% Prozessor-Nutzung. also ziemlich heftig. Das Frontend liegt in der Zeit brach oder müsste irgendeine Lade-Animation anzeigen.

Jetzt meine Frage: Ist es möglich die Enumeration schrittweise zurückzugeben? Also quasi ein Item nach dem anderen Zurückzugeben? Dann würde der Benutzer nicht so auf dem Trockenen liegen und könnte je nach Anwendungsfall sogar schon anzufangen damit zu arbeiten.
 
Hi,

kommt natürlich drauf an, wie genau das alles in welcher Sprache implementiert ist. Aber natürlich kannst du Daten "Häppchenweise" vom Backend übertragen. Du musst halt die Logik implementieren.

Für's Web wäre mein Ansatz - natürlich - AJAX mit JSON.

VG,
Mad
 
Hi,
sowas löse ich mit Akka-Streams.NET
Reactive Streams (ursprünglich aus der Java / Scala -Welt).
Der Sink ist der Endpunkt des Controllers.
Der Client bekommt die Daten chunked geliefert.
Funktioniert prima, gerade weil ein Stream ja eine Kette von Elementen ist.
 
Bei Prozessen die sehr lange dauern kann es sich lohnen den Job selbst als Ressource darzustellen. Dein erster request würde dann einfach sofort die ID des gestarteten Job zurückgeben. Und mit dieser ID kann dein Client dann nachfragen wie weit der Job ist und evtl. Zwischenergebnisse bekommen.

Hängt aber stark von den Details der Situation ab ob das die bessere Variante ist oder nicht.
 
Ja das geht, du kannst z.B. jeweils 1-5 Elemente weiter reichen und den Rest erst bei Bedarf oder sobald verfügbar. Der Nutzer kann dann einfach weiter arbeiten.
 
Zurück
Oben