Wenn Sie in C # eine Methode überschreiben, ist es zulässig, die Überschreibung asynchron auszuführen, wenn dies bei der ursprünglichen Methode nicht der Fall war. Dies scheint eine schlechte Form zu sein.
Das Beispiel, das mich dazu brachte, war das folgende: Ich wurde hinzugezogen, um bei einem Lasttestproblem zu helfen. Bei ungefähr 500 gleichzeitigen Benutzern würde der Anmeldevorgang in einer Umleitungsschleife unterbrochen. IIS protokollierte Ausnahmen mit der Meldung "Ein asynchrones Modul oder Handler wurde abgeschlossen, während ein asynchroner Vorgang noch ausstand". Einige async void
Suchanfragen ließen mich vermuten, dass jemand Missbrauch betrieben hatte , aber meine schnelle Suche in der Quelle konnte nichts finden.
Leider habe ich nach 'async \ svoid' (Regex-Suche) gesucht, als ich nach etwas ähnlichem wie 'async \ s [^ T]' hätte suchen sollen (vorausgesetzt, Task ist nicht vollständig qualifiziert ... Sie haben es verstanden).
Was ich später fand, war async override void onActionExecuting(...
in einem Basiscontroller. Das musste natürlich das Problem sein, und das war es auch. Das Problem wurde behoben, indem es für den Moment synchronisiert wurde.
Zurück zur Frage: Warum können Sie eine Außerkraftsetzung als asynchron markieren, wenn der aufrufende Code sie niemals erwarten könnte?
Task
.