1

が失敗したと思うとき、私はただ座って、最終的にスローされるのを待っていたTaskので、を掘り下げることができました。しかし、最近、失敗を引き起こしたフォームのサイズを変更しようとすると、エラーが目に見えてスローされる可能性があることに気付きました。ActionAggregateExceptionInnerExceptionTask

2つの質問:

  1. これを行うためのより良い方法はありますか?(私は「呼び出しをtry / catch / re-でラップし、re- techniquethrowにブレークポイントを置く」ことを嫌います)。throw
  2. オブジェクト自体がガベージコレクションされたときにスローされると思いました。本当?AggregateExceptionTask
  3. AggregateException#2の答えに照らして:サイズ変更がよりすぐにトリガーされるのはなぜですか?
4

1 に答える 1

2

これを行うより良い方法はありますか?

ResultプロパティまたはWait()関数のいずれかを使用できます。両方ともブロックし、Task失敗した場合は をスローしAggregateExceptionます。例外で何かをしたい場合の別のオプションは、ContinueWith()withを使用することTaskContinuationOptions.OnlyOnFaultedです。

Task オブジェクト自体がガベージ コレクションされると AggregateException がスローされると思いました。本当?

はい、 が何らかの方法でアクセスされない場合、Exception.Net Task4.0 でファイナライズされたときに例外がスローされます。(.Net 4.5 の変更により、がファイナライズTaskされたときに s からの未処理の例外がスローされなくなりました。)Task

AggregateException#2への答えに照らして:サイズ変更がすぐにトリガーされるのはなぜですか?

最も可能性が高いのは、いくつかのオブジェクトが作成され、ガベージ コレクションが実行されるためです。

于 2012-05-09T17:58:24.997 に答える