2016-10-27 78 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/