ホームページ > バックエンド開発 > C++ > C# タスク (Async/Await および ContinueWith) で例外を処理するにはどうすればよいですか?

C# タスク (Async/Await および ContinueWith) で例外を処理するにはどうすればよいですか?

DDD
リリース: 2025-01-03 15:48:39
オリジナル
550 人が閲覧しました

How Do I Handle Exceptions in C# Tasks (Async/Await and ContinueWith)?

C# タスクでの例外処理

Task を操作する場合、アプリケーションの堅牢性と応答性を確保するには、例外処理が不可欠です。この記事では、使用されている C# のバージョンに応じて、例外をキャプチャする 2 つのアプローチについて説明します。

C# 5.0 以降: Async と Await

C# 5.0 以降では、async および await キーワードにより簡素化されます。タスクベースのプログラミングが顕著になります。 ContinueWith に依存する代わりに、非同期メソッドを使用すると、try/catch ブロックを直接使用して例外を処理できます。

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 を使用した ContinueWith

C# の古いバージョンの場合、 TaskContinuationOptions 列挙を使用した ContinueWith オーバーロードは、 used:

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

// For error handling.
task.ContinueWith(t => { /* error handling */ }, context,
    TaskContinuationOptions.OnlyOnFaulted);
ログイン後にコピー

OnlyOnFaulted は、先行タスクが例外をスローした場合にのみ継続が実行されることを保証します。複数の継続をチェーンして、さまざまなケースを処理できます。

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

// If it succeeded.
task.ContinueWith(t => { /* on success */ }, context,
    TaskContinuationOptions.OnlyOnRanToCompletion);
ログイン後にコピー

async/await アプローチを選択するか、TaskContinuationOptions を使用した ContinueWith テクニックを選択するかにかかわらず、これらのメソッドを使用すると、C# タスクで例外を効果的にキャッチし、アプリケーションが確実に例外を処理できるようになります。予期せぬエラーは正常に実行されます。

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

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