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

C# タスクで例外を効果的に処理するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-29 02:21:10534ブラウズ

How Can I Effectively Handle Exceptions in C# Tasks?

タスクでの例外処理: 最適なアプローチを明らかにする

非同期プログラミングの領域では、例外を効果的に管理することが重要です。 System.Threading.Tasks.Task を使用する場合、潜在的な例外を処理するための堅牢な戦略が必要です。

C# 5.0 以降: 非同期でレスキューを待機

革新的な async および await キーワードの導入により、C# 5.0 以降では簡素化されたキーワードが提供されます。例外処理のソリューション。これらのキーワードを使用すると、コンパイラがタスクと非同期プログラミング パターンを使用するようにコードを変換しながら、線形形式でコードを作成できます。

このアプローチを採用するには、単にコードを、で指定されたメソッド内の try-catch ブロックでラップします。 async キーワード。

try
{
    // Start the task.
    var task = Task.Factory.StartNew<StateObject>(() => { /* action */ });

    // Await the task.
    await task;
}
catch (Exception e)
{
    // Perform cleanup here.
}

C# 4.0 以下: TaskContinuationOptions

以前のバージョンの C# では、TaskContinuationOptions 列挙からパラメーターを受け取る ContinueWith オーバーロードを利用できます。これにより、継続タスクの実行条件を指定できます。

具体的には、OnlyOnFaulted オプションを使用すると、先行タスクが例外をスローした場合にのみ継続タスクが実行されるようになります。

// Get the task.
var task = Task.Factory.StartNew<StateObject>(() => { /* action */ });

// For error handling.
task.ContinueWith(t => { /* error handling */ }, context,
    TaskContinuationOptions.OnlyOnFaulted);

例外的でないケースの処理

例外的でないケースを処理するにはC# 4.0 以前では、同じ先行タスクに対して複数の ContinueWith タスクを作成できます。たとえば、正常に完了すると実行されるタスクを作成できます:

// Get the task.
var task = new Task<StateObject>(() => { /* action */ });

// For error handling.
task.ContinueWith(t => { /* error handling */ }, context, 
    TaskContinuationOptions.OnlyOnFaulted);

// If it succeeded.
task.ContinueWith(t => { /* on success */ }, context,
    TaskContinuationOptions.OnlyOnRanToCompletion);

// Run task.
task.Start();

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

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