TestActorRef死锁的可能性是否仍然相关?

时间:2015-04-22 18:28:52

标签: scala testing akka

在akka 2.3.9 documentation中有警告:

  

TestProbe发送到另一个运行于其上的actor的任何消息   如果那个其他演员,CallingThreadDispatcher冒着死锁的风险   也可能发送给这个探测器。 TestProbe.watch和。{的实施   TestProbe.unwatch也会向watchee发送消息,这意味着   尝试观看例如是危险的来自TestActorRef的{​​{1}}。

我尝试使用TestProbeTestProbe重现测试中描述的死锁情况,因为两者都在使用TestActorRef

CallingThreadDispatcher

我预计测试会挂起,但它已成功通过。

警告是否仍然相关且死锁的可能性很高或是否已过时?

1 个答案:

答案 0 :(得分:0)

此警告所说的竞争条件是TestProbe设计中固有的,但是遇到死锁的概率相当小,手表必须与向另一个方向发送消息同时发生,并且两者都必须发生在不同的线程。由于创建顶级演员的方式,在极少数情况下可以观察到后者。

所有这些都相当棘手,并且这些都不适用于为Akka Typed编写和执行测试的方式,我期待这是唯一使用的模式。