HttpClient.GetAsync无法正常工作

时间:2014-12-12 09:17:42

标签: .net httpclient .net-4.5 getasync

为什么这段代码不起作用?我之前使用过类似的东西,这让它更加混乱。它只是退出“等待httpClient.GetAsync ...”行,没有任何可以在try / catch中捕获的异常。我在针对.net 4.5的示例控制台应用程序中使用了相同的代码,并在两台不同的计算机上进行测试,得到相同的结果(或缺少结果)。

编辑:整个Program.cs示例

using System;
using System.Net.Http;

namespace Main
{
    class Program
    {
        static void Main(string[] args)
        {
            DownloadPageAsync();
        }

        private static async void DownloadPageAsync()
        {
            var httpClient = new HttpClient();
            var response = await httpClient.GetAsync("http://en.wikipedia.org/");
            response.EnsureSuccessStatusCode();
            Console.WriteLine(await response.Content.ReadAsStringAsync());
            httpClient.Dispose();

            Console.ReadLine();
        }
    } 
}

1 个答案:

答案 0 :(得分:1)

主线程在DownloadPageAsync方法完成之前结束。

你在方法的签名中使用void,这意味着,开火和忘记。当您在Main方法中调用DownloadPageAsync方法时,如果它运行得太快,它将正常工作,如果需要更多时间,它将在代码执行之前结束程序。您应该使用MainPage方法上的DownloadPageAsync和.Result上的Task来等待代码执行。

或者,更改Console.ReadLine();到主方法,而不是.Result。如果你不按回车键,这也应该有用。)。