Hallo liebe FD-ler,
Ich bin neu mit FlowDesign eingestiegen und finde es sehr gut. Ich habe aber eine Frage, die mich nicht loslässt. Ralf hat vorgeschlagen als Ausgabe von FEs, die mehrere Werte liefern IEnumerable zu verwenden, damit der Empfänger weiß, wann die Daten zu Ende sind. Diesen Ansatz finde ich sehr sauber und gut. Allerdings habe ich folgendes Problem:
Angenommen, die Daten sollen durch eine sequenzielle FE weiterverarbeitet werden (d.h. sie kann die Daten nur einzeln entgegennehmen) und danach den Nachfolgern wieder als IEnumerable zur Verfügung gestellt werden. Es würde jetzt also zwischen dem „Ziehen“ der Daten aus dem IEnumerable zum „Drücken“ der Daten durch die sequenzielle FE und wieder zum „Ziehen“ der Daten durch die Nachfolger gewechselt werden.
Mir fallen da zwei Lösungsansätze ein:
Bild 1 zeigt einen möglichen Flow.
Ansatz 1 ist einfach, blockiert aber den Flow und sammelt
Daten im Speicher an. Das finde ich nicht akzeptabel.
Ansatz 2 erfordert (IMHO) dass der Empfänger auf einem
anderen Thread ausgeführt wird, da es durch die Blockierung ansonsten zu einem
Deadlock kommt. Das zu erzwingen gefällt mir auch nicht.
Als Workaround habe ich momentan einen Flow wie im Bild 2. Transformieren ist dabei eine FE, die die Daten sequenziell durch einen Nebenflow schickt und auf die Rückgabe wartet. Das geschieht erst, wenn der Nachfolger MoveNext() aufruft. Das umgeht die oben genannten Nachteile, führt aber zu einem komplizierten Flow.
Vielleicht verstehe ich das ganze falsch oder ihr könnt mir eine bessere Lösung empfehlen? Ich wäre für jeden Input sehr dankbar.
lg, Eugen