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

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

Linda Hamilton
リリース: 2024-12-29 14:30:11
オリジナル
793 人が閲覧しました

How to Effectively Handle Exceptions in C# Async Tasks?

タスクの例外処理テクニック

非同期プログラミングの分野では、System.Threading.Tasks.Taskフレームワークは、タスクとその潜在的な例外を管理するメカニズムを提供します。 C# では、このような例外を効果的に処理するための複数のアプローチが提供されています。

オプション 1: 非同期と待機 (C# 5.0 以降)

C# 5.0 の出現により、非同期と待機はawait キーワードは、例外処理のためのよりクリーンで合理的な方法を提供します。以下に示すように、ContinueWith をバイパスし、try/catch ブロックを利用して例外をキャプチャし、シーケンシャルな方法でコードを記述することができます。

try
{
    await task;
}
catch (Exception e)
{
    // Handle exceptions
}
ログイン後にコピー

オプション 2: ContinueWith オーバーロード (C# 4.0 以前)

以前のバージョンの C# では、ContinueWith のオーバーロードを使用するという代替アプローチを採用できます。 TaskContinuationOptions 型のパラメータを受け入れます。これにより、先行タスクの状態に基づいてどの継続を実行するかをきめ細かく制御できます。特に例外を処理するには、OnlyOnFaulted オプションを使用します。

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

実装例

提供された例では、次のように ContinueWith を利用してコードを再構築することを検討できます。 🎜>

public class ChildClass : BaseClass
{
    public void DoItInAThread()
    {
        var context = TaskScheduler.FromCurrentSynchronizationContext();
        Task.Factory.StartNew<StateObject>(() => this.Action())
                    .ContinueWith(e => this.ContinuedAction(e), context)
                    .ContinueWith(t => HandleExceptions(t), context, TaskContinuationOptions.OnlyOnFaulted);
    }

    private void ContinuedAction(Task<StateObject> e)
    {
        if (e.IsFaulted)
        {
            return; // Skip execution if faulted
        }

        // Perform action with e.Result
    }

    private void HandleExceptions(Task task)
    {
        // Display error window and log the error
    }
}
ログイン後にコピー
これらのテクニックを活用することで、タスク操作における堅牢な例外処理を確保し、維持することができます。クリーンで構造化されたコードベース。

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

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