You can use a stream of values, for example:
sealed trait Update[T]
case class Progress[T](value: Double) extends Update[T]
case class Finished[T](result: T) extends Update[T]
let your task highlight Progress values when it’s convenient (for example, every time a piece of calculation is completed) and emit one ready-made value after the complete calculation is complete. The consumer could check the meaning of progress to ensure that the task is still moving forward. If the consumer is not interested in updating the progress, you can simply filter it. I think this is more complex than acting.
, , akka streams scalaz. Akka DSL , . Scalaz , , .