2017-12-06 4 views
0

私はPolly Frameworkのドキュメンテーションと例を見てきました。本当に使いやすく素晴らしいです!実装が単一の場所にとどまるようにPollyフレームワークをラップする

私の場合、すべての例外を一時、永続、ログの3種類に分類したいと思います。今、Polly Frameworkを使用して待機して再試行することで、一時的なエラーを処理する責任を負う単一のコードを作成したいと思います。

WaitAndRetryAsync(new[]{ 
        TimeSpan.FromSeconds(1), 
        TimeSpan.FromSeconds(2), 
        TimeSpan.FromSeconds(5) 
        }) 

何かが本質的に永久的であれば、同じように(それは、我々は例を処理しようとしている例外に基づいて、型の知ることができる必要があります:タイムアウトが暫定ことができますが、データベースクレドが正しくない場合、それは永久的です)我々はサポートスタッフに電子メールを送ることができます。

ここで問題は、インターフェイスまたは抽象クラスを使用してどのようにラップすることができるのか、すべての派生クラスがメソッド名とともに例外を渡すことができるようにすることです。これは新しいフレームワークに渡すことができます。それは必要があります。

いずれのポインタも大きな助けになります!

答えて

1

Pollyが呼び出すコードにFuncまたはActionを受け入れるクラスを作成できます。このヘルパーメソッドのような

何か:

public class RetryWrapper 
    { 
     public static TOutput Execute<TInput, TOutput>(Func<TInput, TOutput> func, TInput input) 
     { 
      RetryPolicy retryPolicy = Policy.Handle<TimeoutException>() 
       .Or<OtherException>() 
       .WaitAndRetry(3, x => new TimeSpan(0, 0, 2)); 

      return retryPolicy.Execute(() => func(input)); 
     } 
    } 

次に、あなたはそれをあなたのポインタのための

var result = RetryWrapper.Execute<string, bool>(x => MethodToCall(x), "input") 
+0

感謝を呼び出すことができます!同じ行に何かを作成して元に戻そうとしましょう – Developer

関連する問題