从阅读here我看到演员是可重入的,我希望以下是真实的:如果我有一个类型的演员ThespianType
但是有三个特定演员{{1 (ThespianType
,T1
和T2
),这不会死锁:
T3
我的问题是:相同的重入是否扩展到多个actor类型?
例如,假设我们有:
(external client) -> T1.MethodA() -> T2.MethodB() -> T3.MethodC() -> T1.MethodD()
和PainterType
;和BrushType
和画笔P1
现在发生这种情况:
B2
假设(external client) -> P1.MethodX() -> B2.MethodY() -> P1.MethodZ()
是一个没有阻塞调用的简单方法。
问题:此死锁(或由于检测到死锁而抛出ServiceFabric异常)?
答案 0 :(得分:1)
只要正确使用Actors(例如,不启动自己的线程),就不会发生死锁。这种类型并不重要。
Actors运行时默认允许重入。这意味着,如果一个 Actor A的actor方法调用Actor B上的方法,而Actor B又调用 在Actor A上的另一个方法,允许该方法运行。这是 因为它是同一逻辑调用链上下文的一部分。所有计时器 和提醒调用以新的逻辑调用上下文开始。见 可靠的演员可以重新获得更多细节。