開発者がタスクに基づいて非同期コードを簡単に記述できるようにするために、.NET 4.5 では監視されない例外の既定の例外動作が変更されています。監視されていない例外によって UnobservedTaskException イベントが発生することはありますが (そうしないと重大な変更になります)、デフォルトではプロセスはクラッシュしません。むしろ、イベント ハンドラーが例外を監視するかどうかに関係なく、イベントが発生した後に例外が食べられることになります。
しかし、私の実験の結果は上記のステートメントと一致しません。以下は私のコードです:
static void Main(string[] args)
{
DownloadAsync("http://an.invalid.url.com);
}
async static void DownloadAsync(string url)
{
using (var client = new System.Net.Http.HttpClient())
{
string text = await client.GetStringAsync(url);
Console.WriteLine("Downloaded {0} chars", text.Length);
}
}
メソッドに無効な URL を渡すため、のメソッドをDownloadAsync()
呼び出すと例外がスローされ、アプリケーションがクラッシュします。HttpClient
GetStringAsync()
私の質問は次のとおりです。