在actor中注册计时器的签名是:
IActorTimer RegisterTimer(Func<object, Task> asyncCallback, object state, TimeSpan dueTime, TimeSpan period);
问题:
为什么asynCallback希望接收状态作为类型object的函数参数。毕竟,我的回调已经是Actor的一部分,并且可以直接访问状态。因此,将对象作为参数的要求似乎是多余的。
目前的想法
一个可能的原因是,这允许我们将参与者的状态提供给参与者以外的回调(甚至可能)。这是唯一原因吗?在处理计时器激活方法的状态时,还是应该考虑其他事项?
据我所知(我自己没有使用ActorTimers太多),通常不是通过实际的actor状态(因为您已经拥有该状态),而是要调用的函数的参数。
这个Actor就是一个例子:https : //github.com/Azure-Samples/service-fabric-dotnet-iot/blob/master/src/actors/StorageActor/StorageActor.cs
在这里,它们在注册计时器时将“ false”作为“状态”传递给this.SaveToStorage,但是稍后(在OnDeactivateAsync中),他们将true称为this.SaveToStorage。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句