Created
September 18, 2018 07:21
-
-
Save ioleo/bb281f9485471040fe23d379278748f9 to your computer and use it in GitHub Desktop.
Scalaz Zio Schedule test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import scalaz.zio._ | |
import scalaz.zio.interop.future._ | |
import scala.concurrent.{ ExecutionContext, Future } | |
import scala.concurrent.duration._ | |
object ZioScheduleTest extends App { | |
var counter = 0 | |
def futureF(): Future[Int] = { | |
counter += 1 | |
if (counter % 3 == 0) { | |
val message = s"failed for $counter" | |
println(message) | |
Future.failed(new Exception(message)) | |
} else { | |
println(s"success for $counter") | |
Future.successful(counter) | |
} | |
} | |
val updateSchedule = Schedule.spaced(10.seconds) | |
val retryPolicy = Schedule.fibonacci(1.second) || updateSchedule | |
val ioF = | |
IO.fromFuture(futureF _)(ExecutionContext.global) | |
.repeat(updateSchedule) // should update every 10 seconds, until it fails | |
.retry(retryPolicy) // keep retrying program above ^, with fibonacci growing intervals, but at most 10 seconds | |
// This program will effectively run forever | |
def run(args: List[String]): IO[Nothing, ExitStatus] = | |
ioF.attempt.map(_.fold(_ => 1, _ => 0)).map(ExitStatus.ExitNow(_)) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment