2

タイトルの通り、Pollyを使ってリトライの仕組みを作りました。問題は、独自のカスタム例外ではなく、常に System.AggregateException を取得することです。ここにコードを追加します。

これは、私が作成した polly 静的クラスです。

public static class PollyExtension
{
    public static Task<T> RetryRequestWithPolicyAsync<T,T1>(
        Func<Task<T>> customAction,
        int retryCount,
        TimeSpan pauseSecondsBetweenFailures) where T1 : Exception
    {
        return 
            Policy
            .Handle<T1>()
            .WaitAndRetryAsync(retryCount, i => pauseSecondsBetweenFailures).ExecuteAsync(() => customAction?.Invoke());
    }
}

リトライ ポリーの実際の呼び出しは次のとおりです。

   var result= await PollyExtension.RetryRequestWithPolicyAsync<int, CustomException>( () =>
        {
            if (1 + 1 == 2)
            {
                throw new MyException("test");
            }
            else
            {
                throw new CustomException("test");
            }
        },
       1,
        TimeSpan.FromSeconds(1));

MyException をスローすると、polly も呼び出し元メソッドに MyException をスローすることが期待されます。代わりに、スローされる例外は System.AggregateException です。

ここで何が間違っていますか?ありがとう

編集 1: さらにデバッグした後、AggregateException が内部例外として MyException を持っているようです。これは意図した動作ですか、それとも何か間違っていますか?

4

1 に答える 1