Azure service fabric 多个参与者之间的并发性
如果参与者a调用参与者b和参与者c上的方法,会发生什么Azure service fabric 多个参与者之间的并发性,azure-service-fabric,actor,Azure Service Fabric,Actor,如果参与者a调用参与者b和参与者c上的方法,会发生什么 Task CallBAndC() { IActorB b=ActorProxy.Create(ActorId.CreateRandom(),新Uri(“fabric://MyApp/MyService")); IActorC c=ActorProxy.Create(ActorId.CreateRandom(),新Uri(“fabric://MyApp/MyService")); 任务未来结果=b.方法(); 任务未来结果=c.方法(); /
Task CallBAndC()
{
IActorB b=ActorProxy.Create(ActorId.CreateRandom(),新Uri(“fabric://MyApp/MyService"));
IActorC c=ActorProxy.Create(ActorId.CreateRandom(),新Uri(“fabric://MyApp/MyService"));
任务未来结果=b.方法();
任务未来结果=c.方法();
//做一些冗长的计算
返回(等待未来结果)+(等待未来结果);
}
“b.Method()”和“c.Method()”能否同时运行?或者它们是按顺序运行的(可能是由于处于Actor a的调用上下文中)?
当“b.Method()”和“c.Method()”调用a的方法时会发生什么?这种方法应该没问题,只需要记住几个注意事项:
- 您应该始终等待参与者调用返回的任务,如果您触发并忘记可能会丢失调用,因为无法保证消息已传递
- 当一个参与者向另一个参与者发送调用时,它将在队列中等待,直到参与者可以自由处理调用。当调用来自相同的上下文时,如果启用,并且参与者正在等待相同上下文的操作完成,则将允许调用继续 示例:当参与者A调用参与者B时,B尝试调用参与者A,而A等待对B的初始调用完成,可重入性将允许B继续,然后将结果从A返回到B,然后B将结果返回到A。此行为可以更改,当可重入模式被禁用时,当B尝试调用A时,它将死锁。超时后,操作将失败
Task<int> CallBAndC()
{
IActorB b = ActorProxy.Create<IActorB>(ActorId.CreateRandom(), new Uri("fabric://MyApp/MyService"));
IActorC c = ActorProxy.Create<IActorC>(ActorId.CreateRandom(), new Uri("fabric://MyApp/MyService"));
Task<int> futureBResult = b.Method();
Task<int> futureCResult = c.Method();
// do some lengthy computation
return (await futureBResult) + (await futureCResult);
}