別のスレッドでスローされた例外をキャッチする
マルチスレッド アプリケーションでは、別のスレッドで発生する例外を処理することが重要です。このガイドでは、これを実現するための 2 つのアプローチを説明します。
.NET 4 以降でのタスクベースの例外処理
Task の使用を検討する
Task<int> task = new Task<int>(Test); task.ContinueWith(ExceptionHandler, TaskContinuationOptions.OnlyOnFaulted); task.Start(); ... static void ExceptionHandler(Task<int> task) { Console.WriteLine(task.Exception.Message); }
Task<int> task = new Task<int>(Test); task.Start(); try { task.Wait(); } catch (AggregateException ex) { Console.WriteLine(ex); }
.NET 3.5 での例外処理
Exception exception = null; Thread thread = new Thread(() => Test(0, 0)); thread.Start(); thread.Join(); if (exception != null) Console.WriteLine(exception);
Exception exception = null; Thread thread = new Thread(() => { try { Test(0, 0); } catch (Exception ex) { lock (exceptionLock) { exception = ex; } } }); thread.Start(); thread.Join(); if (exception != null) Console.WriteLine(exception);
以上が.NET で個別のスレッドから例外をキャッチするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。