TPL タスクで例外を処理するとき、例外を処理する 2 つの方法に遭遇しました。1 つ目は、タスク内で例外をキャッチし、次のように結果内で返します。
var task = Task<Exception>.Factory.StartNew(
() =>
{
try
{
// Do Something
return null;
}
catch (System.Exception e)
{
return e;
}
});
task.ContinueWith(
r =>
{
if (r.Result != null)
{
// Handle Exception
}
});
2番目はドキュメント内に示されているもので、適切な方法だと思います:
var task = Task.Factory.StartNew(
() =>
{
// Do Something
});
task.ContinueWith(
r =>
{
if (r.Exception != null)
{
// Handle Aggregate Exception
r.Exception.Handle(y => true);
}
});
最初のアプローチに何か問題があるかどうか疑問に思っていますか? この手法を使用して「未処理の集計例外」例外を時々受け取りましたが、これがどのように発生するのか疑問に思っていましたか?
明確にするために、2番目のパターンの方が良いと思いますが、最初のパターンを利用するコードのチャンクがあり、リファクタリングが必要かどうか、つまり、すべての例外がそうではないことが判明したかどうかを調べようとしています。閉じ込められた。