2017-07-12 9 views

答えて

0

これは、あなたがそれを実行する場合は、今後は「回」倍

よりも成功ではなくなるまで、それは「実行プロセス」を印刷していることがわかりますFuture.recoverWith に基づいてリトライ機能の一例です
object X extends App{ 
    type Request = String 
    type Response = String 
    import scala.concurrent.ExecutionContext.Implicits.global 
    def retry(request: Request, process: Request => Future[Response], times: Int): Future[Response] ={ 
    val responseF = process(request) 
    if(times > 0) 
     responseF.recoverWith{ 
     case ex => println("fail") 
      retry(request, process, times - 1) 
     } 
    else 
     responseF 
    } 

    def process(s: Request): Future[Response] = { 
    println("run process") 
    if(Random.nextBoolean()) Future.successful("good") else Future.failed(new Exception) 
    } 

    val result = retry("", process, 3) 
    import scala.concurrent.duration._ 
    println(Await.result(result, 1.second)) 

} 
関連する問題