Files
odc-analyzer/app/services/throttlers.scala

23 lines
636 B
Scala

package services
import scala.concurrent.{ExecutionContext, Future}
trait Throttler {
def throttle[T](f: => Future[T]): Future[T]
}
final class SingleFutureExecutionThrottler() (implicit executionContext: ExecutionContext) extends Throttler{
private var nextFuture: Future[_] = Future.successful(null)
def throttle[T](f: => Future[T]): Future[T] = synchronized{
val newFuture = nextFuture.recover{ case _ => null}.flatMap(_ => f)
nextFuture = newFuture
newFuture
}
}
final class NoThrottler() (implicit executionContext: ExecutionContext) extends Throttler{
def throttle[T](f: => Future[T]): Future[T] = f
}