ファイア アンド フォーゲット: 例外処理に関する考慮事項
ここで提起された問題は、「ファイア アンド フォーゲット」を実装する際の例外の適切な処理を中心に展開しています。 " アプローチ。例外を単に飲み込む拡張メソッドを使用するという最初の提案では、潜在的なエラーがわかりにくくなる可能性があるため、懸念が生じます。
しかし、タスク内で発生する例外を本当に無視することが意図であれば、非同期拡張メソッドを使用することもできます。最適解ではありません。タスクを待機すると、タスクの完了に対する依存関係が導入されるため、「ファイア アンド フォーゲット」の原則が無効になります。
このシナリオでは、最初に提案された同期拡張メソッドの方が適切です。ただし、予期されるが無視できる例外が確実に適切に処理されるようにするには、メソッドのより複雑なバージョンが必要になります。
たとえば、次のメソッドは、許容可能な例外タイプと無視可能な例外タイプのリストを定義するパラメーターを受け取ります。
public static void Forget(this Task task, params Type[] acceptableExceptions) { try { task.Wait(); } catch (Exception ex) { // TODO: consider whether derived types are also acceptable. if (!acceptableExceptions.Contains(ex.GetType())) throw; } }
このアプローチにより、例外の選択的な処理が可能になり、予期しないエラーのみが確実に処理されます。
このメソッドを使用しても、タスクの完了から完全に独立しているという意味では、実際にはタスクが「起動したら忘れる」わけではないことに注意することが重要です。ただし、タスクの予期される動作の一部である特定の例外を無視する手段が提供されます。
以上が「ファイアアンドフォーゲット」アプローチでは例外を無視すべきでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。