在akka 2.3.9 documentation中有警告:
从
TestProbe
发送到另一个运行于其上的actor的任何消息 如果那个其他演员,CallingThreadDispatcher
冒着死锁的风险 也可能发送给这个探测器。TestProbe.watch
和。{的实施TestProbe.unwatch
也会向watchee发送消息,这意味着 尝试观看例如是危险的来自TestActorRef
的{{1}}。
我尝试使用TestProbe
和TestProbe
重现测试中描述的死锁情况,因为两者都在使用TestActorRef
CallingThreadDispatcher
我预计测试会挂起,但它已成功通过。
警告是否仍然相关且死锁的可能性很高或是否已过时?
答案 0 :(得分:0)
此警告所说的竞争条件是TestProbe设计中固有的,但是遇到死锁的概率相当小,手表必须与向另一个方向发送消息同时发生,并且两者都必须发生在不同的线程。由于创建顶级演员的方式,在极少数情况下可以观察到后者。
所有这些都相当棘手,并且这些都不适用于为Akka Typed编写和执行测试的方式,我期待这是唯一使用的模式。