等待Actor退出()

Cra*_*lin 13 concurrency unit-testing scala actor

如何等待Scala Actor退出()?我在单元测试中设置了两个Actors,并发送一些消息以启动它们.他们来回发送一些消息,最终都调用exit().如何使我的单元测试等待两个演员在通过之前完成?

Abh*_*kar 7

如果您事先知道演员之间交换的消息数量,则可以使用a java.util.concurrent.CountDownLatch来跟踪消息的数量.在演员中,每次处理完消息后,都可以

latch.countDown()
Run Code Online (Sandbox Code Playgroud)

并在你的主线程做

latch.await()
Run Code Online (Sandbox Code Playgroud)

这将使您的主线程等待,直到锁存器的计数降至零.

如果你事先不知道消息的数量,但有条件表明完成,那么你可以使用java.util.concurrent.locks.Condition.在演员中,当你的状况满足时,做

if (conditionSatisfied)
  condition.signal()
Run Code Online (Sandbox Code Playgroud)

并在你的主线程做

while (!conditionSatisfied)
 condition.await()
Run Code Online (Sandbox Code Playgroud)

让它等到条件满足.

见的Javadoc CountDownLatchCondition了解详情.

请参阅此要点以获取使用示例Condition.