ホームページ >バックエンド開発 >C++ >.NET で個別のスレッドから例外をキャッチするにはどうすればよいですか?

.NET で個別のスレッドから例外をキャッチするにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-05 06:54:39561ブラウズ

How to Catch Exceptions from Separate Threads in .NET?

別のスレッドでスローされた例外をキャッチする

マルチスレッド アプリケーションでは、別のスレッドで発生する例外を処理することが重要です。このガイドでは、これを実現するための 2 つのアプローチを説明します。

.NET 4 以降でのタスクベースの例外処理

Task の使用を検討する

    新しいスレッドを作成する代わりに。 Task を使用すると、.Exceptions プロパティを介して例外を取得できます。これを行うには 2 つの方法があります:
  • 別の方法:
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 での例外処理

    .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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。