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

.NET で個別のスレッドからの例外を効果的に処理するにはどうすればよいですか?

Patricia Arquette
リリース: 2025-01-05 17:29:40
オリジナル
407 人が閲覧しました

How to Effectively Handle Exceptions from Separate Threads in .NET?

別のスレッドでスローされた例外を処理する方法

マルチスレッド アプリケーションでは、他のスレッドで発生する例外を処理することが重要になります。メインコードを実行するもの。この課題には、適切なエラー処理とアプリケーションの安定性を確保するために慎重な処理が必要です。

タスクの使用 .NET 4 以降では

.NET 4 以降、タスククラスは、個別のスレッドから例外をキャプチャするエレガントな方法を提供します。 Task でタスクを作成した後、これを開始すると、タスク オブジェクトの .Exceptions プロパティを使用して、スローされた例外を取得できます。これらの例外を処理するには 2 つの方法があります:

  1. 別のメソッド: タスクのスレッドで例外を非同期に処理する ContinueWith() を使用してコールバック メソッドを作成します。
task.ContinueWith(ExceptionHandler, TaskContinuationOptions.OnlyOnFaulted);

private void ExceptionHandler(Task<int> task)
{
    var exception = task.Exception;
    Console.WriteLine(exception);
}
ログイン後にコピー
  1. 同じメソッド: Wait() によってスローされた AggregateException をキャッチして、呼び出し元のスレッドで例外を処理します。
try
{
    task.Wait();
}
catch (AggregateException ex)
{
    Console.WriteLine(ex);    
}
ログイン後にコピー

.NET 3.5 でのスレッドの使用

.NET 3.5 では、Taskが使用できない場合は、次の方法を使用してスレッドからの例外を処理できます:

  1. ハンドラー アクションの受け渡し: 例外を処理するためのデリゲート アクションを作成し、それをスレッドに渡します。例外が発生すると、スレッドはアクションを呼び出します。
Exception exception = null;
Thread thread = new Thread(() => SafeExecute(() => Test(0, 0), Handler));
thread.Start();

private void Handler(Exception exception)
{        
    Console.WriteLine(exception);
}
ログイン後にコピー
  1. Out パラメータの使用: SafeExecute() メソッドを変更して、例外。例外が発生すると、スレッドによってパラメータが設定されます。
Exception exception = null;
Thread thread = new Thread(() => SafeExecute(() => Test(0, 0), out exception));
thread.Start();

...

Console.WriteLine(exception);
ログイン後にコピー

これらの手法を実装すると、別のスレッドでスローされた例外を効果的に処理でき、例外が存在する場合でもアプリケーションが確実に動作し続けることが保証されます。予期しないエラーが発生しました。

以上が.NET で個別のスレッドからの例外を効果的に処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート