HttpClient.PostAsync退出代码为0的应用程序



今天一切正常,直到它停止…下面是最小的源代码(我使用VS 2012 Update 1, . net 4.5)。当我运行它时,应用程序在调用client.PostAsync()时退出,因此它永远不会到达Console.ReadLine()。调试器也一样,没有异常,什么都没有,退出代码为0。

我试着重新启动机器,重新启动VS2012 -没有工作。

今天一切都在运行,不知道发生了什么变化(没有安装软件等,所有其他网络应用程序仍然工作)。

任何想法?我想我快要疯了。

class Program
{
    static void Main(string[] args)
    {
        Run();
    }
    private async static void Run()
    {
        using (var client = new System.Net.Http.HttpClient())
        {
            var headers = new List<KeyValuePair<string, string>>
                              {
                                  new KeyValuePair<string, string>("submit.x", "48"),
                                  new KeyValuePair<string, string>("submit.y", "15"),
                                  new KeyValuePair<string, string>("submit", "login")
                              };
            var content = new FormUrlEncodedContent(headers);
            HttpResponseMessage response = await client.PostAsync("http://www.google.com/", content);
            Console.ReadLine();
        }
    }
}

您的问题是程序通常在其Main()方法完成时退出。当你在Run()中碰到await时,你的Main()就结束了,因为这就是async方法的工作方式。

你应该做的是使Run()成为async Task方法,然后等待Task在你的Main()方法:

static void Main()
{
    RunAsync().Wait();
}
private static async Task RunAsync()
{
    …
}

在c# 7.1+中,你应该使用async Main:

static async Task Main()
{
    await RunAsync();
}
private static async Task RunAsync()
{
    …
}

注释:

    你不应该使用async void方法,除非你必须使用(这是异步事件处理程序的情况)。
  1. 在GUI应用程序或ASP中混合awaitWait()。NET是危险的,因为它会导致死锁。但如果你想在控制台应用程序中使用async,这是正确的解决方案。

相关内容

  • 没有找到相关文章

最新更新