Asynchrone Verarbeitungen sollten in der Regel durch Hintergrundprozesse durchgeführt werden. In manchen Situationen ist dies nicht praktikabel, dann kann ein Task gestartet werden. Beispielsweise werden ORM Events synchron ausgeführt. Dies bedeutet, dass die dortige Implementierung beispielsweise das Speichern eines Datensatzes verlangsamt. Es muss klar sein, das Berechnungen in einem Task vom Speichern eines Datensatzes und damit von seiner UnitOfWork
abgekoppelt sind. Daher muss man genau überlegen ob dies wirklich sinnvoll ist.
Für die Implementierungen von Tasks die unter Benutzerrechten laufen stehen in der Api.User
Methoden zur Verfügung.
Api.User.RunWithContext(() => { ... });
ORM Events werden auch ausgeführt, wenn der Datensatz im Backend verarbeitet wird. Führt man nun Funktionalitäten asynchron aus, und es werden viele Datensätze verarbeitet, wird der Server mit einer Vielzahl von asynchronen Tasks belastet. Daher gibt es eine weitere Möglichkeit die Abspaltung eines Tasks davon abhängig zu gestalten, ob der Vorgang im Vordergrund oder im Hintergrund ausgeführt wird. Bei Ausführen im Hintergrund wird der Code nun doch synchron ausgeführt und entlastet den Server bei Massenverarbeitungen, wie den Import.
Api.User.RunWithContextIfForeground(() => { ... });