7

Task Parallel Library を使用してタスクを実行しています。タスクをキャンセルすると、OperationCanceledException がスローされ、次のように AggregateException を使用してキャッチされます。AggregateException には、スローされた例外に対応する TaskCanceledExceptions のリストが含まれています。残念ながら、これらの TaskCanceledExceptions は、元の例外によってスローされたスタック トレースを失っているようです。これは設計によるものですか?

try
{
    task1.Wait();
}
catch (AggregateException aggEx)
{
    var tcex = ex as TaskCanceledException;
    if (tcex != null)
    {
        Debug.WriteLine("InnerException:{0}, Message:{1}, Source:{2}, StackTrace: {3}",
            tcex.InnerException, tcex.Message, tcex.Source, tcex.StackTrace);

        return true;
    }
    else
    {
        return false;
    }
}

結果:

InnerException:, Message:A task was canceled., Source:, StackTrace: 
4

1 に答える 1

1

設計によるものだと思いますが、タスクがキャンセルされた例外は、通常、タスクが終了するのを助けるためにタスクがキャンセルされたときにのみスローされます。この状況でスタック トレースにはどのような目的がありますか? そうは言っても、キャンセルの例外を設計した開発者の思考プロセスについての洞察はありません。私の意見です。

元の例外によってスローされたスタック トレースが失われるという意味がよくわかりません。通常、内部/元の例外はありません。おそらく、他の例外のためにタスクをキャンセルしていますか? その場合、「元の」例外を上流でキャッチし、そこに記録してからキャンセルする必要があります。

于 2012-04-13T18:00:52.023 に答える