2012-03-26 6 views
5

Neue ASP.NET Web API HttpClient hat mir einige seltsame Ergebnisse. Hier ist mein Code:HttpClient GetStringAsync - Es kommt nie zurück

Dies kommt nie zurück und die Konsole erscheint plötzlich und verschwindet. Wenn ich den Code wie unten ändern, es funktioniert wie es soll:

static void Main(string[] args) { 

    var address = "http://localhost:3895/api/urls"; 

    Console.WriteLine(getString(address)); 
    Console.ReadLine(); 

} 

public static string getString(string uri) { 

    var httpClient = new HttpClient(); 

    return httpClient.GetStringAsync(uri).Result; 
} 

Jede Idee, was das Problem sein?

+1

Das kompiliert nicht. Ein Einstiegspunkt ('Main') kann nicht asynchron sein. Es wird mit dem Fehler CS4009 fehlschlagen. – vcsjones

+0

@vcsjones Im Async CTP ist es erlaubt (aber eine schlechte Idee) – hvd

+1

@hvd Interessant. Am besten, dass sie es jetzt aber nicht zulassen. – vcsjones

Antwort

9

async auf Main ist im VS11/.NET 4.5 Compiler nicht erlaubt, also nehme ich an, dass Sie das Async CTP verwenden. Wenn .NET 4.5 überhaupt eine Option ist, machen Sie den Schalter.

Abgesehen davon, der Grund, warum es nicht funktioniert, ist, weil async, oder allgemeiner, Aufgaben, in der Lage, etwas Weg für den Rest des Codes ausgeführt werden können. Es funktioniert mit .Result, weil der Code synchron läuft, so dass das Problem nicht gilt.

Es gibt keine eingebaute Unterstützung für Konsolenanwendungen, weil sie Nachricht in der Art und Weise normalerweise nicht verwenden Loops, die zum Beispiel WinForms tut, aber Sie können vor allem GeneralThreadAffineContext.cs bei Microsoft Visual Studio Async CTP\Samples\(C# Testing) Unit Testing\AsyncTestUtilities, schau, ein einfaches Beispiel zu bekommen, das funktioniert in Konsolenanwendungen auch.

Verwandte Themen