2016-10-27 80 views
1

从阅读here我看到演员是可重入的,我期望以下情况属实:如果我有单一类型的演员ThespianType但是三个具体演员ThespianTypeT1T2,并T3),那么这将不会发生死锁:可靠的演员在不同演员类型中的重入

(external client) -> T1.MethodA() -> T2.MethodB() -> T3.MethodC() -> T1.MethodD()

我的问题是:同样的重入扩展到多个演员类型?

例如,假设我们有:

  • 两位男主角类型PainterTypeBrushType;和每种类型的
  • 一个演员:画家P1和刷B2

立即发生这种情况:

(external client) -> P1.MethodX() -> B2.MethodY() -> P1.MethodZ()

假设MethodZ()是一个简单的方法,没有阻塞调用。

问题:这个死锁(或者由于检测到死锁而引发ServiceFabric异常)?

回答

1

只要您正确使用Actor(不会启动您自己的线程),就不会发生死锁。类型无关紧要。

Actors运行时默认允许重入。这意味着如果演员A的演员方法调用演员B的方法,演员B又调用 演员A的另一种方法,则该方法被允许运行。这是 ,因为它是同一逻辑调用链上下文的一部分。所有计时器 和提醒呼叫都以新的逻辑呼叫上下文开始。有关更多详细信息,请参阅 Reliable Actors重新进入。

https://azure.microsoft.com/en-us/documentation/articles/service-fabric-reliable-actors-introduction/