ホームページ > バックエンド開発 > C++ > C# で「async void」が悪い習慣になるのはなぜですか?

C# で「async void」が悪い習慣になるのはなぜですか?

Barbara Streisand
リリース: 2024-12-25 13:23:55
オリジナル
655 人が閲覧しました

When and Why Is `async void` a Bad Practice in C#?

async void が悪い習慣とみなされる場合とその理由

コンテキストの理解:

C# の非同期メソッドは返すことができますタスクまたは無効のいずれか。 async void メソッドは特定のシナリオでは便利であるように見えますが、一般的には推奨されない潜在的な欠点が生じます。 async void が悪い習慣であると考えられる理由と、これらの状況に効果的に対処する方法を見てみましょう。

async void を避ける理由:

  1. エラー処理課題:
    非同期 Task メソッドとは異なり、非同期 void メソッドからエスケープする例外には型破りな性質があります。
  2. 構成の課題:
    Async void メソッドは、高レベルの非同期メソッドに簡単に構成できません。これにより、コードの保守性と再利用が制限されます。
  3. テストの難しさ:
    非同期 void メソッドの単体テストは、独自のエラー処理と構成セマンティクスのため、非同期 Task メソッドのテストよりも大幅に複雑です。 .

代替アプローチ:

結果を待たずにボタンのクリックに反応することに重点を置くこの例では、より適切なアプローチは、PrimeCustomTask メソッドを非同期タスクとして定義し、OnLoad メソッドを次のように利用することです。非同期操作を開始するためのエントリ ポイント。このようにして、async Task メソッドのすべての利点が維持されます。

protected override async void OnLoad(EventArgs e)
{
    if (CustomTask == null)
        await PrimeCustomTask();
}

private async Task PrimeCustomTask()
{
    CustomTask = new TaskCompletionSource<int>();
    while (CustomTask.Task.IsCompleted == false && IsDisposed == false) 
    {
        // Wait for button click to set the value
        await Task.Delay(100); 
    }

    int result = CustomTask.Task.Result;

    // Show the value
    if (result != 0) MessageBox.Show(result.ToString());
}
ログイン後にコピー

これらのガイドラインに従うことで、async void メソッドの落とし穴を回避し、コードの保守性、再利用性、テスト容易性を向上させることができます。

以上がC# で「async void」が悪い習慣になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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