2017-04-11 3 views
-1

Ich hatte diesen Code in .Net Core. Wir stellten fest, Kern nicht die beste Lösung für uns war gerade jetzt, so habe ich in .Net 4.5.2 worden Refactoring und wenn ich"Warten auf HTTPClient.GetAsync" nie abgeschlossen

nennen

HttpResponseMessage response = await client.GetAsync(passedlURI);

Weiter geht es nur auf unbestimmte Zeit zu denken. Ich habe es auf eine lokale Host-Version meiner API hingewiesen und bestätigt, dass die API die Kopfzeile liest und meine Daten korrekt zurückgibt. Ich habe Postman verwendet, um zu bestätigen, dass sowohl die Live-API als auch die localhost-API mir die richtigen Daten senden. Hier ist mein Code so weit:

enter image description here

+0

Ich frage mich, ob dieser Code kompiliert ... Anyway !? Außerdem macht diese Architektur für mich keinen Sinn. – DotNetDev

+0

Können Sie 'öffentlichen String CallAPI' in' öffentlichen asynchronen Task CallAPI' verwandeln? – mason

+1

@DotNetDev Sie benötigen keine Return-Anweisung in einer Async-Task-Methode. Nur 'async Aufgabe '. – mason

Antwort

2

Stellen Sie sicher, .ConfigureAwait(false) mit jedem Ihrer await zu verwenden. Synchrones Warten auf eine Aufgabe, die intern auf den aktuellen Synchronisierungskontext wartet, ist eine bekannte Ursache für Deadlocks in ASP.NET.

Zum Beispiel statt:

await GetAPIAsync(); 

Do:

await GetAPIAsync().ConfigureAwait(false); 

Natürlich wäre es noch besser, wenn Sie nicht synchron warten hat sich auf eine Aufgabe zu beginnen.

Das Problem tritt bei ASP.NET Core nicht auf, da es keinen benutzerdefinierten Synchronisierungskontext verwendet.

Verwandte Themen