2017-03-11 25 views
0

私はからRetryExecutorを使用しています:私はretryExecutorにいくつかのタスクを提出したRetryExecutor:すべてのタスクが完了するのを待つ方法

ScheduledExecutorService executorService = Executors.newScheduledThreadPool(10); 
RetryExecutor retryExecutor = new AsyncRetryExecutor(executorService) 
      .retryOn(IOException.class) 
      .withExponentialBackoff(500, 2) 
      .withMaxDelay(5_000) // 5 seconds 
      .withUniformJitter() 
      .withMaxRetries(5); 

:IDの下https://github.com/nurkiewicz/async-retry

私のコードを。

retryExecutor.getWithRetry(ctx -> { 
       if(ctx.getRetryCount()==0) 
        System.out.println("Starting download from : " + url); 
       else 
        System.out.println("Retrying ("+ctx.getRetryCount()+") dowload from : "+url); 
       return downloadFile(url); 
      } 
     ).whenComplete((result, error) -> { 
      if(result!=null && result){ 
       System.out.println("Successfully downloaded!"); 
      }else{ 
       System.out.println("Download failed. Error : "+error); 
      } 
     }); 

ここで、送信されたすべてのタスクが完了するのを待つ方法を教えてください。 すべての再試行が終了するまで待機したい(ある場合)。

executorService.shutdown()と同じくらい単純になるとは思いません。

答えて

0

CompletableFuture<DownloadResult> downloadPromise = retryExecutor.getWithRetry(...) .whenComplete(...); DownloadResult downloadResult = downloadPromise.get()

+1

あなたの答えへの説明を追加してください:[どのように私は良い答えを書くのですか?](https://stackoverflow.com/help/how-to-answer) –

関連する問題