私は、非同期/待機プログラミングと例外処理にもっと精通しています。非同期メソッドで例外をキャッチする
static void Main(string[] args)
{
TestAsyncException();
}
private static async void TestAsyncException()
{
try
{
var result = await Task.Factory.StartNew(() => DoSomething());
//do something with the result
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
}
private static int DoSomething()
{
throw new Exception("Exception was thrown!");
}
私は期待していException
は正常に処理されるが、代わりに、コードの実行が停止し、私はタイプの例外「のSystem.Exception」の中に発生した
を取得..しかし で扱いませんでしたユーザーコード。
しかし、コードを実行し続けると、Exception
が実際にキャッチされます(メッセージはConsole
に表示されます)。
コードの実行を中断することなくException
をキャッチする方法を教えてください。
これが実際のコードであれば、それは良い例ではありません。 'TestAsyncException'は、' await'の間にコントロールを 'Main'に返します。したがって' Main'も戻り、処理は終了します。これは例外と干渉し、処理方法を予測することは難しいです。 –
私はtry catchが、例外がメインスレッドにスローされるように、非同期メソッドを実行しているメインスレッドの周りにいる必要があると信じています(私は間違っているかもしれません) –
多分この回答は役に立ちます: http://stackoverflow.com/questions/5383310/catch-an-exception-as-async-method –