akka/akka-core

Scheduled Source with 0 initialDelay is using interval as initialDelay

Open

#18,383 opened on 2015年9月1日

GitHub で見る
 (13 comments) (0 reactions) (0 assignees)Scala (13,277 stars) (3,547 forks)batch import
1 - triagedhelp wantedt:stream

説明

The test app below with initialDelay = 0.nanos prints this:

root 2015-09-01T16:28:12.209Z BEFORE
root 2015-09-01T16:28:17.317Z TICK

-> applied initialDelay is ~5 seconds which is clearly unexpected

now change to initialDelay = 1.nanos and you get

root 2015-09-01T16:28:38.760Z BEFORE
root 2015-09-01T16:28:38.889Z TICK

-> initialDelay is correctly applied

import java.time.Instant

import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import akka.stream.scaladsl.{Sink, Source}

import scala.concurrent.duration._

object BugInitialDelay extends App{

  import scala.concurrent.ExecutionContext.Implicits.global

  implicit val system = ActorSystem("foo")
  implicit val materializer = ActorMaterializer()

  println(Instant.now() + " BEFORE")
  Source(initialDelay = 0.nanos, interval = 5.seconds, tick = ()).take(1).map{ tick =>
    println(Instant.now() + " TICK")
  }.runWith(Sink.ignore).onComplete { _ =>
    system.shutdown()
  }
}

コントリビューターガイド