非同期イベント ハンドラー: 非同期の空のメソッドを処理します
非同期プログラミングの分野では、「開始して忘れる」非同期の空のメソッドを使用してタスクを開始する習慣は、このメソッドには中断されたタスクの追跡可能性がなく、そのようなメソッドで発生する可能性のある例外の処理が難しいため、推奨されないことがよくあります。ただし、非同期イベント ハンドラーでは、同じ回避原則を適用する必要があるかという疑問が生じます。
非同期イベント ハンドラーの理由
疑いもなく、推奨されるアプローチは、非同期 null メソッドの使用を避けることです。ただし、非同期 null イベント ハンドラーは例外です。これは、イベント ハンドラーには自然な非同期コンテキストがあり、通常は特定の 1 回限りの実行に使用されるため、戻り値の欠落はそれほど問題ではないためです。
例: フォーム読み込みシナリオの再検討
次の非同期 null イベント ハンドラーを考えてみましょう:
<code>private async void Form_Load(object sender, System.EventArgs e) { await Task.Delay(2000); // 执行异步操作 // ... } </code>
潜在的な欠陥を軽減するには、次のようにリファクタリングできます。
<code>Task onFormLoadTask = null; // 跟踪任务,可以实现取消 private void Form_Load(object sender, System.EventArgs e) { this.onFormLoadTask = OnFormLoadTaskAsync(sender, e); } private async Task OnFormLoadTaskAsync(object sender, System.EventArgs e) { await Task.Delay(2000); // 执行异步操作 // ... } </code>
このアプローチではタスクの制御が強化され、キャンセルが可能になりますが、追加の定型コードが追加されます。
注意すべき隠れたリスク
潜在的な再入可能の問題に加えて、非同期イベント ハンドラーにはさらに微妙なリスクがいくつかあります。
結論
非同期 null イベント ハンドラーは一般に許容されますが、潜在的な影響を認識することが重要です。慎重に単体テスト用の非同期 null イベント ハンドラーのロジックを分割することで、コードの品質や保守性を損なうことなく、非同期プログラミングのパワーを活用できます。
以上がAsync Void イベント ハンドラーは避けるべきですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。