【问题标题】:HttpClient.GetAsync not workingHttpClient.GetAsync 不工作
【发布时间】:2014-12-12 09:17:41
【问题描述】:

为什么这段代码不起作用?我之前使用过类似的东西,这使得它更加混乱。它只是在“等待 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();
        }
    } 
}

【问题讨论】:

  • 可以在您使用此代码的地方添加方法的签名吗?
  • 刚刚测试过,对我有用。
  • 我知道,这让我很困惑,这里没有什么花哨的东西,它应该可以工作。

标签: .net httpclient .net-4.5 getasync


【解决方案1】:

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

您在方法的签名中使用了 void,这意味着,一劳永逸。当您在 Main 方法中调用 DownloadPageAsync 方法时,如果运行速度太快,它会正常工作,如果需要更多时间,它将在代码执行之前结束程序。您应该在 DownloadPageAsync 上使用 Task 并在 Main 方法上使用 .Result 来等待代码执行。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多