我没有得到两个“表达式”之间的实际(语义)差异。
据说“loop”适合“react”,“while(true)”适合“receive”,因为“react”不会返回,而“loop”是一个再次调用主体的函数(至少这是我从来源中扣除的内容 - 我对使用的“andThen”并不十分熟悉)。 “接收”会阻止池中的一个线程,“ react ”不会。但是,对于“ react ”,会查找可以附加该函数的线程。
所以问题是:为什么我不能将“循环”与“接收”一起使用?它的行为似乎也与“while(true)”变体不同(而且更好!),至少这是我在分析器中观察到的。
更奇怪的是,用 "-Dactors.maxPoolSize=1 -Dactors.corePoolSize=1"和 "while(true)"和 "receive"立即调用乒乓球(这是我所期望的) - 但是,用 "循环”和“接收”,它可以毫无问题地工作-在一个线程中-这是怎么回事?
谢谢!
最佳答案
while
之间的关键区别和 loop
是while
限制循环迭代 在同一个线程中发生 . loop
构造(如 Daniel 所述)使参与者子系统能够在它选择的任何线程上调用 react 。
因此使用 receive
的组合在 while (true)
内将参与者绑定(bind)到单个线程。使用 loop
和 react
允许您在单个线程上运行支持多个参与者 .
关于scala - while(true) 和循环有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1283918/