HttpClient での async/await 例外処理に関して私が直面している問題について、誰かが少し教えてくれることを期待していました。説明するためにいくつかのコードを書きましたが、Windows Phone 8 デバイスとエミュレーターの両方で実行されています。
private async void SearchButton_Click(object sender, EventArgs e)
{
try
{
HttpClient client = new HttpClient();
System.Diagnostics.Debug.WriteLine("BEGIN FAULTY REQUEST:");
string response = await client.GetStringAsync("http://www.ajshdgasjhdgajdhgasjhdgasjdhgasjdhgas.tk/");
System.Diagnostics.Debug.WriteLine("SUCCESS:");
System.Diagnostics.Debug.WriteLine(response);
}
catch (Exception exception)
{
System.Diagnostics.Debug.WriteLine("CAUGHT EXCEPTION:");
System.Diagnostics.Debug.WriteLine(exception);
}
}
この関数を呼び出すボタンをタップすると、デバッガー コンソールに次の出力が生成されます。最も興味深いのは太字のものです。
不正なリクエストを開始:
タイプ 'System.Net.WebException' の例外が System.Windows.ni.dll で発生し、マネージド/ネイティブ境界の前に処理されませんでした
タイプ 'System.Net.WebException' の例外が System.Windows.ni.dll で発生し、マネージド/ネイティブ境界の前に処理されませんでした
タイプ 'System.Net.Http.HttpRequestException' の初回例外が mscorlib.ni.dll で発生しました
タイプ 'System.Net.Http.HttpRequestException' の例外が mscorlib.ni.dll で発生し、マネージド/ネイティブ境界の前に処理されませんでした
キャッチされた例外:
(そして、ここでは HttpRequestException を出力します)
もちろん、私が呼び出している URL はナンセンスなので、この場合はエラーが発生することが予想されます。ここで私が理解していないのは、出力が例外がキャッチされたことを同時に報告しているときに、デバッガーが例外が処理されていないと報告する理由です。また、出力が印刷されている間、アプリの UI 側の応答が大幅に低下します。これは、何かが間違っている可能性があることを示しています。
これは、async と await を使用するときに例外を処理する方法ではありませんか? ご意見をお待ちしております。ありがとう。