Ihre Aktion gibt möglicherweise eine IHttpActionResult
zurück, die die Aktion asynchron ausführt, wenn das Framework seine ExecuteAsync
aufruft.
Wenn Sie jedoch vor dem Erstellen und Zurückgeben des Ergebnisses zuerst einige andere asynchrone Aufrufe durchführen müssen, müssen Sie die Signatur in async Task<IHttpActionResult>
ändern. Das ist alles.
Wenn Ihr Controller-Aktionscode await
nicht verwendet, können Sie zurück zur einfacheren Signatur wechseln. Das von Ihnen zurückgegebene Ergebnis ist jedoch immer noch asynchron.
Um klar zu sein, verwenden Sie in beiden Fällen asynchronen Code.
Der Leistungsvorteil besteht darin, dass - sofern alle Aufrufe der tiefsten Ebene asynchron sind - ein Webserver Thread während der Datenträger- oder Netzwerk-E/A nicht blockiert wird und Ihr Server mehr Anfragen mit weniger Ressourcen verarbeiten kann.
Denken Sie sorgfältig, bevor Sie Wait
oder Result
für eine Aufgabe aufrufen, oder erstellen Sie selbst eine Aufgabe in ASP.NET-Code.
Zwei berechtigte Gründe zur Hand-Code, vorsätzliches Multi-Threading oder Parallelität für Web-Server-Code ist:
- , wenn es empfängt minimalen Verkehr, sondern führt Rechenarbeit, einen Anruf so oft jeden eine Berechnung zu überfahren Daten und Sie möchten alle 16 Kerne verwenden.
- Wenn Sie> 1 gleichzeitige Aufrufe von Datenbank-Shards oder> 1 anderen Diensten machen, würden Sie eine Aufgabe für jede Shard-Abfrage starten und auf alle warten.
Sie müssen einen 'Task' zurückgeben, wenn Sie die Funktionen 'async' und' await' verwenden. –
Romoku
@Romoku Die Idee ist also, dass Sie Async nur verwenden, wenn Sie Threading implementieren müssen? Gibt es im Zusammenhang mit Web-API-Methoden, die einfache CRUD-Operationen ausführen, einen funktionalen Unterschied zwischen der Verwendung einer Methode, die 'IHttpActionResult' und' async Task 'zurückgibt? –
alex
Bei Verwendung von 'async' kann es zu Leistungsverbesserungen bei der Skalierung kommen, die jedoch für die meisten Webanwendungen vernachlässigbar sind. Es gibt keinen funktionalen Unterschied zwischen Sync und Async. – Romoku