scala - while(true) 和循环有什么区别?

标签 scala

我没有得到两个“表达式”之间的实际(语义)差异。
据说“loop”适合“react”,“while(true)”适合“receive”,因为“react”不会返回,而“loop”是一个再次调用主体的函数(至少这是我从来源中扣除的内容 - 我对使用的“andThen”并不十分熟悉)。 “接收”会阻止池中的一个线程,“ react ”不会。但是,对于“ react ”,会查找可以附加该函数的线程。

所以问题是:为什么我不能将“循环”与“接收”一起使用?它的行为似乎也与“while(true)”变体不同(而且更好!),至少这是我在分析器中观察到的。
更奇怪的是,用 "-Dactors.maxPoolSize=1 -Dactors.corePoolSize=1"和 "while(true)"和 "receive"立即调用乒乓球(这是我所期望的) - 但是,用 "循环”和“接收”,它可以毫无问题地工作-在一个线程中-这是怎么回事?

谢谢!

最佳答案

while 之间的关键区别和 loopwhile限制循环迭代 在同一个线程中发生 . loop构造(如 Daniel 所述)使参与者子系统能够在它选择的任何线程上调用 react 。

因此使用 receive 的组合在 while (true) 内将参与者绑定(bind)到单个线程。使用 loopreact 允许您在单个线程上运行支持多个参与者 .

关于scala - while(true) 和循环有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1283918/

相关文章:

java - Scala:在 Scala 中使用来自 Java 的多个构造函数

generics - 在 Scala 中获取泛型类型的特定简单名称

scala - 为什么我们可以在 Scala 中使用新类作为父类的类型?

scala - 使用 json4s 时如何设置 Jackson 解析器功能?

java - Flink 没有向 kafka 提交偏移量

json - 如果您有 Reads[T] 和 Writes [T],那么 Format[T] 的目的是什么?

scala - 使用 sbt-native-packager 和 JDKPackager 插件自定义 Freedesktop 文件

scala - 如何对 Set[ValidatedNel[String, Double]] 求和?

scala - 将方法放入 trait 或 case 类?

scala - 创建并行执行列表组合器