`等待HttpClient.GetAsync()`静默失败 - DNX命令行应用程序

时间:2015-08-29 22:05:42

标签: c# asp.net-core

以下在指定的行上无声地失败。

using (var ht = new HttpClient())
{
    var r = await ht.GetAsync(RootUrl + Id.ToString()); <-----
    Page = await r.Content.ReadAsStringAsync();
}

没有例外,没有错误,没有任何错误。执行只是停止,没有在下一行遇到断点,并且应用程序退出。 try / catch中的周围环境也不会触发捕获。

作为DNX .xproj命令行应用程序运行。

与coreclr和full相同的行为。通过VS和DNX命令行启动。

到底发生了什么事?

Project.json如下:

{
    "version": "1.0.0-*",
    "description": "Scrapers Console Application",
    "authors": [ "Kaelan" ],
    "tags": [ "" ],
    "projectUrl": "",
    "licenseUrl": "",

    "dependencies": {

        "System.Net.Http": "4.0.0-*",
        "HtmlAgilityPack": "1.4.9"
    },

  "commands": {
    "Scrapers": "Scrapers"
  },

  "frameworks": {
    "dnx451": { }
    }
}

编辑:我正在使用的完整代码。拿出实际项目的大块进行测试,(保持同样的问题)。

public class Program
{
    const string RootUrl = "<-snipped->";
    public async void Main(string[] args)
    {
        var Id = 244;

        var Page = "";

        using (var ht = new HttpClient())
        {
            var r = await ht.GetAsync(RootUrl + Id.ToString());
            Debug.Write(r.StatusCode + " on page: " + Id.ToString());

            Page = await r.Content.ReadAsStringAsync();
        }

        Console.ReadLine();
    }
}

1 个答案:

答案 0 :(得分:2)

您应该避免使用async void

对于没有结果值的方法,将返回类型更改为相应的异步返回类型:Task