Hey Denis, Hey Ralf,
@Denis: spannender Vergleich zu Regelkreise aus der Steuerungs- und Regelungstechnik bzw. Automatisierungtechnik. Das werde ich in meinen Beispielen mit einbeziehen.
@Ralf: Sehr schade, dass "async" der üblichen Denke zu sehr widerspricht. Ich bin da ebenfalls Denis seiner Meinung. Async, hier vielleicht noch eine genauere Bezeichnung Non-Blocking I/O, halte ich für den neuen "Default". Damit meine ich natürlich nicht Multithreading, sondern eben async Verarbeitung innerhalb eines Message-Loop auf einem Thread und Entkopplung durch eine Queue.
Und genau hier macht aus meiner Sicht eine Klassifizierung der "Bausteine" Sinn.
A) Für I/O (In->Process->Out / UI -> Verarbeitung ->UI) machen, auch aus genannten Gründen, nur Non-Blocking Bausteine wirklich Sinn. Hier greift ein übliches Observer-Pattern mit entsprechender Engine.
B) Für alle logischen Teile würde ich möglichst immer auf sync Bausteine zurückgreifen. Aus meiner Sicht sind die meisten Algorithmen sequentielle Abläufe. Eine async Strategie würde hier wie von Ralf bereits festgestellt zu sehr von der eigentlichen Lösung ablenken.
Ich meine, aus der Monadentheorie lassen sich einiger der Konzepte bereits gut adaptieren und dann auch entsprechend vermitteln.
Unfold -> In
Bind -> Process
Fold -> Out
Solange Daten in "In" und "Out" non-blocking verarbeitet werden, sind hiermit In->Process->Out->In natürlich auch Implementierung als Regelkreise möglich.
Cheers, Mike