Effective C# 3rd 読書メモ 49 例外フィルタを使う

通常のcatch節では、例外の型に基いて捕捉を行う。例外をキャッチしたらリトライするような実装では、最終的に、例外を再度throwすることになる。このやり方では、その後の分析が難しくなる。このような場合には、例外フィルタを使うべきである。

例外フィルタは、catch節にwhenキーワードを重ねて使用する。

public static void Main()
{
    var retryCount = 0;
    var data = default(string);

    while (data == null)
    {
        try
        {
            data = MakeWebRequest();
        }
        catch (TimeoutException e) when (retryCount++ < 3)
        {
            WriteLine("Operation timed out. Trying again");
            Task.Delay(1000 * retryCount);
        }
    }
}

private static string MakeWebRequest()
{
    throw new TimeoutException();
}

例外フィルタを使用すると、例外をキャッチした際にもコールスタックは破棄されないので、例外の発生した状況をあとで追いやすい。また、例外フィルタを使用したほうがパフォーマンスも良くなる。

コメントを残す

コメントを残す