29

今日は停止するまですべてが機能していました... 以下は最小のソースコードです (私は 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();
        }
    }
}
4

1 に答える 1

58

あなたの問題は、Main()メソッドが終了するとプログラムが通常終了することです。そして、 inMain()を押すとすぐに終了します。それがメソッドの仕組みだからです。awaitRun()async

あなたがすべきことは、メソッドにしてからRun()async Taskメソッドで を待つことです:TaskMain()

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()
{
    …
}

さらにいくつかのメモ:

  1. 必要がasync voidない限り、メソッドを使用しないでください (非同期イベント ハンドラーの場合)。
  2. awaitGUI アプリケーションまたは ASP.NET でとを混在Wait()させると、デッドロックが発生するため危険です。asyncただし、コンソール アプリケーションで使用する場合は、これが適切なソリューションです。
于 2013-01-06T14:28:27.423 に答える