2017-02-02 8 views
0

私のプロジェクトでGuavaの再試行を使用しています。私のメソッドがtrueを返さない場合は、一定の間隔で再試行しています。それが真を返すとすぐに、それは停止するはずです。guavaの再試行フレームワークを使用して一定の時間間隔で再試行を続ける

public static void main(String[] args) { 
    Callable<Boolean> callable = new Callable<Boolean>() { 
     public Boolean call() throws Exception { 
     System.out.println("hello: " + new Date()); 
     boolean status = false; 
     return status; 
     } 
    }; 

    Retryer<Boolean> retryer = 
     RetryerBuilder.<Boolean>newBuilder().retryIfResult(Predicates.<Boolean>alwaysTrue()) 
      .withWaitStrategy(WaitStrategies.fixedWait(1, TimeUnit.MINUTES)) 
      .withStopStrategy(StopStrategies.neverStop()).build(); 
    try { 
     boolean abc = retryer.call(callable); 
     System.out.println("world" + abc); 
    } catch (RetryException e) { 
     e.printStackTrace(); 
    } catch (ExecutionException e) { 
     e.printStackTrace(); 
    } 
    } 

私は上記のコードを取得しており、1分ごとに再試行を続けます。実行時に状態の値をtrueに変更すると、停止するはずですが停止しませんでした。私は何が間違っているのか考えていますか?

答えて

0

間違った述語を使用しています。あなたの述語は常に「true」を返し、再試行からあなたの結果を無視します。適切な述語を指定してください:

Predicate<Boolean> predicate = new Predicate<Boolean>() { 
     @Override 
     public boolean apply(Boolean input) { 
      return !input; 
     } 
    }; 
RetryerBuilder.<Boolean>newBuilder().retryIfResult(predicate) 
+0

hmm私は混乱しています。私のコードはこの変更のように見えますか? –

+0

私の答えを編集しました。 retryIfResultメソッドdocsによると、述語がtrueを返すたびに再試行されます。 – eg04lt3r

+0

常にfalseを返すと再試行したいが、trueを返すと停止するはずです。どうすればいい? –

関連する問題