在 Actor 中注册计时器的签名是:
IActorTimer RegisterTimer(Func<object, Task> asyncCallback, object state, TimeSpan dueTime, TimeSpan period);
问题:
为什么 asynCallback 期望接收状态作为对象类型的函数参数。毕竟,我的回调已经是 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。
关于c# - Actor 计时器 - 注册计时器参数 - 为什么 Func<object, Task> 而不是 Func<Task>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35639014/