8

MSDN でこの記事と、このトピックに関する SO に関するいくつかの質問/回答を調査しましたが、以下のコードが機能しない理由を理解できません (サンプル コンソール アプリで)。

MSDN によると、AggregateException がスローされることが予想されます。これには、helloメッセージを含む 1 つの内部例外が含まれます。代わりに、このhello例外は処理されません。デバッガー内で発生します。

続行を押すか、スタンドアロンで実行すると、期待どおりに動作します。VSで常に続行を押さないようにする方法はありますか? 結局のところ、Try...Catchブロック内にあるものはすべて、シングル スレッド プログラミング モデルで処理されると見なされます。そうしないと、デバッグが悪夢になる可能性があります。

VB.NET

Sub Main()
  Try
    Task.Factory.StartNew(AddressOf TaskThatThrowsException).Wait()
  Catch ex As AggregateException
    Console.WriteLine(ex.ToString) 'does not get here until you hit Continue
  End Try
End Sub

Private Sub TaskThatThrowsException()
  Throw New Exception("hello") 'exception was unhandled
End Sub

C#

namespace ConsoleApplication1 {
  class Program {
    static void Main(string[] args) {
      try {
        Task.Factory.StartNew(TaskThatThrowsException).Wait();
      }
      catch (AggregateException ex) {
        Console.WriteLine(ex.ToString()); //never gets here                
      }
    }

    static void TaskThatThrowsException() {
      throw new Exception("hello"); //exception was unhandled            
    }
  }
}

ここで私が見逃している明らかなものはありますか?

4

2 に答える 2

2

これは、Visual Studio のダイアログが何を言っているのかを誤解していることが原因である可能性が最も高いです。

例外は「ユーザー未処理」です。それをキャッチするユーザー コード (元のException) がないため、TPL によってキャッチされます。したがって、デバッガーを続行するか、デバッガーを使用せずにアプリケーションを実行すると、期待どおりの動作が見られます。

于 2013-02-20T22:45:01.337 に答える
2

これには、「マイ コードのみを有効にする」設定が影響します。Tools->Options の下で、Debugging->General->Just My Code を有効にします。オンにすると、コードで例外が処理されない場合、例外は未処理と見なされます。このオプションをオフにしてみてください。

参照: http://msdn.microsoft.com/en-us/library/dd997415.aspx

于 2013-02-21T19:06:45.730 に答える