Created
September 28, 2017 20:23
-
-
Save fomkin/a6bc62d63e86f4b15f4c8c7593396780 to your computer and use it in GitHub Desktop.
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
final class JavaTimerScheduler { | |
private val timer = new Timer() | |
def scheduleOnce[T](delay: FiniteDuration)(job: => T)(implicit ec: ExecutionContext): JobHandler[T] = { | |
val promise = Promise[T] | |
val task = new TimerTask { | |
def run(): Unit = { | |
Future { | |
val result = job // Execute a job | |
promise.complete(Success(result)) | |
} | |
} | |
} | |
timer.schedule(task, delay.toMillis) | |
JobHandler( | |
cancel = () => { task.cancel(); () }, | |
result = promise.future | |
) | |
} | |
def schedule[U](interval: FiniteDuration)(job: => U)(implicit ec: ExecutionContext): Cancel = { | |
val task = new TimerTask { | |
def run(): Unit = Future { job } | |
} | |
val millis = interval.toMillis | |
timer.schedule(task, millis, millis) | |
() => { task.cancel(); () } | |
} | |
} | |
type Cancel = () => Unit | |
case class JobHandler[+T]( | |
cancel: Cancel, | |
result: Future[T] | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment