Загрузка...

Behebung von Async-Problemen in ASP.NET Core 3.1: Verständnis von Redirects und Datenbank-Tasks

Erfahren Sie, wie Sie häufige Async-Probleme in ASP.NET Core 3.1 beheben, die das Redirect-Verhalten und die Fertigstellung von Datenbank-Tasks beeinflussen, für eine bessere Benutzererfahrung.
---
Dieses Video basiert auf der Frage https://stackoverflow.com/q/62394313/ gestellt von dem Nutzer 'R. Schreurs' ( https://stackoverflow.com/u/456456/ ) sowie auf der Antwort https://stackoverflow.com/a/62403664/ bereitgestellt von dem Nutzer 'Johnathan Barclay' ( https://stackoverflow.com/u/8126362/ ) auf der Website 'Stack Overflow'. Vielen Dank an diese großartigen Nutzer und die Stackexchange-Community für ihre Beiträge.

Besuchen Sie diese Links, um den Originalinhalt und weitere Details zu sehen, z. B. alternative Lösungen, aktuelle Entwicklungen zum Thema, Kommentare, Versionsverlauf usw. Der ursprüngliche Titel der Frage lautete beispielsweise: Async controller action returning a 302 redirect, is 'overtaken' by the next request

Außerdem steht der Inhalt (außer Musik) unter der Lizenz CC BY-SA https://meta.stackexchange.com/help/licensing
Der ursprüngliche Fragenbeitrag steht unter der Lizenz 'CC BY-SA 4.0' ( https://creativecommons.org/licenses/by-sa/4.0/ ), und der ursprüngliche Antwortbeitrag steht unter der Lizenz 'CC BY-SA 4.0' ( https://creativecommons.org/licenses/by-sa/4.0/ ).

Falls Ihnen irgendetwas auffällt oder Unstimmigkeiten bestehen, schreiben Sie mir bitte an vlogize [AT] gmail [DOT] com.
---
Behebung von Async-Problemen in ASP.NET Core 3.1: Verständnis von Redirects und Datenbank-Tasks

Beim Arbeiten mit dem ASP.NET Core Framework, insbesondere im Bereich asynchroner Programmierung, können Entwickler auf unerwartetes Verhalten stoßen, das den Ablauf ihrer Anwendungen stört. Ein solches Problem tritt bei asynchronen Controlleraktionen auf, speziell wenn ein 302 Redirect ausgelöst wird, bevor alle Aufgaben abgeschlossen sind. Dies kann dazu führen, dass nach einer Weiterleitung veraltete Daten auf der Seite angezeigt werden. In diesem Beitrag gehen wir auf dieses Problem ein und zeigen effektive Lösungen, um eine zuverlässigere Anwendungsleistung zu erzielen.

Verständnis des Problems

In unserem Szenario haben wir eine ASP.NET Core 3.1-Anwendung, die eine Liste von Arbeitselementen verwaltet und eine Funktion bereitstellt, mit der Benutzer diese Elemente Mitarbeitern zuweisen können. Das Problem tritt auf, wenn die POST-Aktion zur Zuweisung der Elemente asynchron aufgerufen wird, ohne die darin laufenden Tasks richtig zu steuern. Dadurch ruft die Anwendung manchmal beim Redirect zwischengespeicherte Daten ab und zeigt vorherige Zuweisungen anstelle der aktuellen Updates.

Kurzübersicht:

Controller-Aktionen: Wir haben sowohl eine GET-Aktion, die Arbeitselemente asynchron abruft, als auch eine POST-Aktion, die Zuweisungen verarbeitet, ohne auf die Tasks zu warten.

Beobachtetes Verhalten: Nach der Weiterleitung aus der POST-Aktion, wenn die Zuweisungs-Tasks noch nicht beendet sind, ruft die GET-Aktion veraltete Daten ab.

Tiefere Betrachtung der aktuellen Implementierung

Schauen wir uns an, wie beide Aktionen aufgebaut sind.

GET-Aktion zum Auflisten der Arbeitselemente

Diese Aktion ruft erfolgreich Arbeitselemente asynchron ab:

[[Siehe Video, um diesen Text oder Codeausschnitt anzuzeigen]]

POST-Aktion zum Zuweisen von Arbeitselementen

Die problematische Aktion sieht wie folgt aus:

[[Siehe Video, um diesen Text oder Codeausschnitt anzuzeigen]]

Obwohl die Methode _itemData.Assign(employeeId, itemIds); aufgerufen wird, wird nicht darauf gewartet, dass die Zuweisungen abgeschlossen sind, bevor die Weiterleitung ausgeführt wird. Dies führt dazu, dass die Datenbankoperationen während des Redirects noch im Gange sind und damit zu inkonsistentem Verhalten.

Die Ursache des Problems

Das Hauptproblem entsteht durch die Verwendung von Array.ForEach() zur Verarbeitung der Zuweisungen. Diese Methode unterstützt keine asynchronen Delegaten korrekt und vernichtet somit die Verknüpfung zu den resultierenden Tasks. Indem nicht auf die Fertigstellung der Tasks gewartet wird, erfolgt die Weiterleitung zu früh.

Verwirrende Log-Ausgabe

Aus dem Logging-Auszug ist ersichtlich, dass während nach einem Redirect die Arbeitselemente abgefragt werden, die Zuweisungen noch im Hintergrund laufen:

[[Siehe Video, um diesen Text oder Codeausschnitt anzuzeigen]]

Benutzer sehen womöglich veraltete Arbeitselemente, bis eine Aktualisierung oder ein erneuter Abruf erfolgt.

Umsetzung der Lösungen

Um das Problem zu beheben, implementieren Sie die folgenden Änderungen:

Schritt 1: Ändern der Assign-Methode

Machen Sie die Assign-Methode asynchron und verwenden Sie statt Array.ForEach() LINQ, um Tasks zu erzeugen:

[[Siehe Video, um diesen Text oder Codeausschnitt anzuzeigen]]

Schritt 2: Await im Controller einfügen

Stellen Sie sicher, dass die Controlleraktion die Assign-Methode korrekt awaited:

[[Siehe Video, um diesen Text oder Codeausschnitt anzuzeigen]]

Fazit

Indem Sie die asynchrone Handhabung Ihrer Zuweisu

Видео Behebung von Async-Problemen in ASP.NET Core 3.1: Verständnis von Redirects und Datenbank-Tasks канала vlogize
Яндекс.Метрика
Все заметки Новая заметка Страницу в заметки
Страницу в закладки Мои закладки
На информационно-развлекательном портале SALDA.WS применяются cookie-файлы. Нажимая кнопку Принять, вы подтверждаете свое согласие на их использование.
О CookiesНапомнить позжеПринять