1

私のアプリは .NET 4.5 で、監視されていないタスクの例外に関するすべてのエラーをログに記録するイベント ハンドラーがあります。

TaskScheduler.UnobservedTaskException += (sender, e) => e.Exception.Handle(ex =>
{
    logger.Error(e.Exception);
    return false;
});

false を返すと、アプリケーションがシャットダウンされます。.NET 4.0 の動作をシミュレートします。

私の質問は、なぜこのコードがイベントを呼び出し、その結果、結果を観察している場合にアプリをクラッシュさせるのですか?

try
{
    var resultado = httpClient.GetAsync('http://.....').Result;
}
catch (Exception ex)
{
    logger.Error(ex);
}

更新:いくつかのデバッグの後、.Result を呼び出さなかったときに別のタスクがあり、問題を引き起こしていることがわかりました。

4

2 に答える 2

1

UnobservedTaskExceptionEventArgs.Observedtrueに設定する必要があります。この時点で結果を観察しても効果はありませんが、効果があると合理的に信じているかもしれません。

于 2013-01-24T12:35:32.370 に答える
0

デバッグを行った後、.Resultを呼び出さなかったときに別のタスクがあり、問題が発生していることがわかりました。

于 2013-01-28T11:11:41.323 に答える