2016-06-27 5 views
1

Ich arbeite an einer neuen API, die schließlich eine sehr große Menge an Verkehr erhalten wird. Ich war zunächst unter dem Eindruck, dass ich wollen würde ConfigureAwait(false) durch meine vollen async/await Stapel setzen, aber nach einigen application insightstracing zu debuggen versuchen, fand ich heraus, dass bestimmte Werte in den HttpContext verloren gehen, wenn ich ConfigureAwait(false) verwenden.In einer asynchronen ASP.NET-Web-API mit viel Datenverkehr: Wie wirkt sich ConfigureAwait auf false aus?

Kann jemand mit etwas hohem Verkehr API Erfahrung sagen Sie mir noch etwas, das ich vermisse, das könnte betroffen sein durch ConfigureAwait(false) wie ist es für einen Benutzer möglich, die Ausgabe von einem anderen Benutzerwunsch zu erhalten?

Was wären die Auswirkungen der Entfernung aller ConfigureAwait(false) Aussagen in meinem API?

+1

"Ist es möglich, dass ein Benutzer die Ausgabe von einer anderen Benutzeranforderung erhalten" wäre ein großer Fehler. Und ich glaube nicht, dass ConfigureAwait das bricht. Ich weiß nicht, was für eine definitive Antwort Sie suchen, aber AFAIK .ConfigureAwait (false) ist so ziemlich das beste Verfahren für Webapi, es sei denn, Sie haben spezielle Thread Affinitätsfälle (was unwahrscheinlich ist) – Vivek

+0

Es gibt nichts in meinem Code würde einem Benutzer erlauben, die Antwort eines anderen zu bekommen, aber weil ich einige Werte im HttpContext nach einem asynchronen Anruf verlor, sah ich das irgendwie als eine rote Fahne. – IWriteApps

+0

Nun, es ist logisch, ohne die Configure (false) muss es zusätzliche Informationen halten, um Thread-Affinität zu erhalten - die dann mit der Konfiguration gelöscht werden kann. Wenn Sie immer noch besorgt sind, würde ich vorschlagen, genau herauszufinden, was entfernt wird. – Vivek

Antwort

5

ist es möglich, dass ein Benutzer die Ausgabe von einer anderen Benutzeranforderung erhält?

Realistisch, nein. Sicherlich würde dies nicht nur durch Hinzufügen ConfigureAwait(false) passieren. Sie müssten Daten explizit von einer Anfrage an eine andere weitergeben, um dies zu tun.

Welchen Einfluss hätte das Entfernen aller ConfigureAwait (false) -Anweisungen in meiner API?

Diese API kann nicht auf Informationen über die aktuelle Anfrage zugreifen, da es keine aktuelle Anfrage geben würde. Für eine API wäre dies wünschenswert. Der UI-spezifische Code würde mit der aktuellen Anfrage interagieren, um die Eingabe für die API bereitzustellen, und wäre in der Lage, die Anfrage mit den Ergebnissen der API-Aufrufe zu aktualisieren, aber die API selbst würde nicht mit der Anfrage interagieren.

Das heißt, es sei denn, Ihre API ist speziell als UI-API konzipiert und wurde mit dem ausdrücklichen Zweck der Interaktion mit der aktuellen Anforderung entworfen. In diesem Fall sollten Sie die Informationen zur aktuellen nicht explizit entfernen Anfrage mit ConfigureAwait(false).

Verwandte Themen