Asynchrone Operationen

  • Ein kurzes Beispiel für Asynchrone IO Operationen

    Hey,


    es kommt immer wieder zu Missverständnissen beim Thema "Asynchrone Datenbankabfragen und sonstige IO Operationen". Rückgabewerte, Callbacks und der Ablauf werden fehlinterpretiert, falsch interpretiert - Aber auch nirgendwo richtig erklärt. Hier möchte ich mich kurz dazu äußern.


    Unser Ziel: Ein Einhorn. Wir bauen uns ein Einhorn um dieses dann zu reiten. Das Einhorn sieht so aus:


    Dieses Einhorn braucht eine Weile um heranzureifen. Wir gehen hier bei einer Instanziierung von 2 Sekunden aus (Der Code hier gibt das nicht her!!). Wir haben eine Klasse AsyncExample mit der wir unser Einhorn laden können. Diese enthält eine synchrone und eine asynchrone Methode.


    Die synchrone Methode ist relativ einfach und deshalb kommt sie zuerst:


    Mit AsnycExample#doLongQuery() bekommen wir nun direkt unser geliebtes rosa Plüscheinhorn. Dauert allerdings ein wenig und der Main Thread friert ein:


    In kurz, das ist böse. Wir werden nun unsere Herangehensweise ändern und unser Einhorn asynchron erzeugen und reiten. Dafür brauchen wir ein sogenanntes Callback:


    Wir führen auch eine neue Methode ein: AsyncExample#doAsync() Diese hat allerdings keinen Rückgabewert mehr und erfordert sogar ein Callback als Parameter!


    Ihr könnt euch das wie ein Einhorn vorstellen, das etwas trinken muss aber auch durch die große Weite Welt läuft. Es gibt in der Fantasiewelt mit Einhörnern eine Regenwolke. Diese bewegt sich jedoch nicht und bleibt die ganze Zeit an der gleichen Stelle und spendet Trinkwasser. Das Einhorn muss stehen bleiben um zu trinken und ist "blockiert". Wenn die Wolke aber neben dem Einhorn her fliegt, kann es unterwegs trinken.
    Das Einhorn ist Unser Programm, das Trinkwasser das Ergebnis eines langen Queries und die Wolke eine Datenbank.


    Das Callback bekommt mit auf den Weg was es mit dem Ergebnis machen soll (Zb das Einhorn mit Wasser versorgen). Das sieht so aus:



    Der Programmfluss wird dadurch nicht unterbrochen und das Einhorn kann man trotzdem reiten, sobald es geladen ist. Das müsst ihr allerdings selbstständig auf z.B. MySQL übertragen, ich habe euch nur ein kleines Modell gegeben.


    Hier nochmal als ganze Klasse mit allem drin:



    Viel Spaß damit!


    MFG
    Nathalie

Teilen