首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >阿克卡流,来源于功能?

阿克卡流,来源于功能?
EN

Stack Overflow用户
提问于 2017-04-24 13:57:09
回答 2查看 1.9K关注 0票数 7

我希望有一个源,它在给定的时间间隔内评估一个函数并发出它的输出。作为一种解决办法,我可以使用Source.queue + offer来实现它,但是还没有找到一种更干净的方法。理想情况下我会有这样的东西

代码语言:javascript
运行
复制
def myFunction() = ....                     // function with side-effects 
Source.tick(1.second, 1.second, myFunction) // myFunction is evaluated at every tick

有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-24 14:33:14

也许最干净的方法是使用map

代码语言:javascript
运行
复制
Source.tick(1.second, 1.second, NotUsed).map(_ ⇒ myFunction())
票数 15
EN

Stack Overflow用户

发布于 2017-04-24 14:34:25

我想,throttle是你所需要的。完全可运行的示例,其中Source应用于迭代,它使用了next()中的函数

代码语言:javascript
运行
复制
import akka.actor.ActorSystem
import akka.stream.ActorMaterializer
import akka.stream.ThrottleMode.Shaping
import akka.stream.scaladsl.Source

import scala.concurrent.duration._

implicit val system = ActorSystem()
implicit val materializer = ActorMaterializer()
var i = 0

def myFunction(): Int = {
  i = i + 1
  i
}

import scala.collection.immutable.Iterable

val x: Iterable[Int] = new Iterable[Int] {
  override def iterator: Iterator[Int] =
    new Iterator[Int] {
      override def hasNext: Boolean = true

      override def next(): Int = myFunction()
    }
}
Source(x).throttle(1, 1.second, 1, Shaping).runForeach(println)

throttle参数:节流源,每秒1元素,最大突发= 1,在发出消息之前暂停以满足节流率(这是Shaping的功能)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43590101

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档