Munixo Support Forum - Kostenfreier Support für Munixo Anwender und Entwicklungspartner
0 Punkte

Datenbankzugriffe per LUA können synchron und asynchron ablaufen, am Beispiel von Update:

Update(string name, string guid, object rawFields)

versus

UpdateAsync(ILuaEngine engine, string name, string guid, object rawFields)

Wann genau macht es Sinn einen synchronen Datenbankzugriff zu verwenden im Gegensatz zu einem Asynchronen? Wie sind die beiden Befehle unterschiedlich Implementiert? Welche Faktoren bei einem LUA Button / Kachel / Server-Script muss ich beachten um die korrekte Wahl zwischen Synchron / Asynchronem DB-Zugriff zu treffen? 

von (1.1k Punkte)

1 Antwort

+1 Punkt
Beste Antwort

Beide Befehle sind derart implementiert, wie man es sich unter einer synchronen und asynchronen Programmierung vorstellen kann.

Im synchronen Fall wird der Code in der Zeile der Methode Update() ausgeführt, bevor die nächste Zeile betrachtet wird.

Für die asynchronen Methoden ist das nicht der Fall. Sie wird dann ausgeführt, wenn die Ressource dafür vorhanden ist (ohne andere Operationen zu blockieren).

Wichtig ist im asynchronen Fall, dass eine "Completed"-Funktion eingebaut wird, falls aktualisierten Daten in der Tabelle im weiteren Verlauf des Lua Skripts benötigt werden.

local task = DB:UpdateAsync(this, objectName, guid, values)
task:AddEvent("completed", "UpdateCompleted")

Hier ein paar Entscheidungshilfen für oder gegen einen

Synchronen Aufruf:

  • optimal für kleine Operationen auf der Datenbank mit sofortigem Ergebnis.
  • Einfacher Aufruf im Code: In der Code-Zeile nach meinem Datenbankzugriff kann ich davon ausgehen, dass alle Operationen auf Datenbank und Server (inklusive Events) durchgeführt wurden.
  • Blockiert das UI im geöffneten Tab während der Ausführung.
Asynchronen Aufruf:
  • für größere Funktionen / Prozesse, die im Hintergrund ausgeführt werden können.
  • komplizierteres Programmieren, falls das Ergebnis der Operation im Code benötigt wird (siehe oben).
  • blockiert den Tab nicht.
  • Es sind parallele Datenbankzugriffe möglich (kann auch sehr gefährlich sein).

von (1.4k Punkte)
ausgewählt von
Danke, das hilft bei der Implementierung sehr!