0

このコードが機能しないのはなぜですか? 以前に同様のものを使用したことがあり、さらに混乱しています。「await httpClient.GetAsync...」行で終了するだけで、try/catch でキャッチできる例外はありません。.net 4.5 を対象とするサンプル コンソール アプリにこれとまったく同じコードがあり、2 つの異なるマシンでテストして、同じ結果 (またはその欠如) を得ています。

編集: 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();
        }
    } 
}
4

1 に答える 1

1

DownloadPageAsync メソッドが完了する前に、メイン スレッドが終了しています。

メソッドのシグネチャに void を使用しています。つまり、起動して忘れます。Main メソッド内で DownloadPageAsync メソッドを呼び出す場合、実行速度が速すぎる場合は問題なく動作しますが、もう少し時間がかかる場合は、コードが実行される前にプログラムが終了します。DownloadPageAsync で Task を使用し、Main メソッドで .Result を使用して、コードが実行されるまで待機する必要があります。

または、Console.ReadLine(); を変更します。.Result の代わりにメイン メソッドに。エンターキーを押さなくても動作するはずです:)。

于 2014-12-12T09:55:03.867 に答える