C# HttpClient GetStringAsync-它永远不会回来

C# HttpClient GetStringAsync-它永远不会回来,c#,httpclient,asp.net-web-api,async-await,c#-5.0,C#,Httpclient,Asp.net Web Api,Async Await,C# 5.0,新的ASP.NET Web API HttpClient给了我一些奇怪的结果。这是我的密码: class Program { static async void Main(string[] args) { var address = "http://localhost:3895/api/urls"; Console.WriteLine(await getStringAsync(address)); Console.ReadLine()

新的ASP.NET Web API HttpClient给了我一些奇怪的结果。这是我的密码:

class Program {

    static async void Main(string[] args) {

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

        Console.WriteLine(await getStringAsync(address));
        Console.ReadLine();

    }

    public static async Task<string> getStringAsync(string uri) {

        var httpClient = new HttpClient();
        return await httpClient.GetStringAsync(uri);
    }
}

你知道会出现什么问题吗?
Main
上的
async
在VS11/.NET 4.5编译器中是不允许的,所以我假设你使用的是异步CTP。如果使用.NET 4.5是一种选择,请务必进行切换

除此之外,它不起作用的原因是因为
async
,或者更一般地说,任务依赖于能够以某种方式发出信号以执行剩余代码。它与
.Result
一起工作,因为代码是同步运行的,所以问题不适用


控制台应用程序没有内置支持,因为它们通常不会像WinForms那样使用消息循环,但您可以查看
Microsoft Visual Studio Async CTP\Samples\(C#Testing)单元测试\AsyncTestUtilities
,尤其是
GeneralThreadAffineContext.cs
,获取一个在控制台应用程序中也能工作的基本示例。

甚至不编译。入口点(
Main
)不能是异步的。它将因CS4009错误而失败。@vcsjones在异步CTP中允许它(但这不是一个好主意)@hvd有趣。最好是他们现在不允许。谢谢大家,我正在试着看看这个应用程序是否有效。因此,控制台应用程序只是一个测试。但很高兴知道这一点。我将在其他地方尝试这个方法。单元测试也有同样的想法。只需确保使用
async Task
而不是
async void
。后者是火与遗忘的一种形式。
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;
}