Actor计时器 - 注册计时器参数 - 为什么Func <object,task =“”>而不是Func <task>

时间:2016-02-25 21:46:37

标签: c# .net azure timer azure-service-fabric

在演员中注册计时器的签名是:

IActorTimer RegisterTimer(Func<object, Task> asyncCallback, object state, TimeSpan dueTime, TimeSpan period);

问题:

为什么asynCallback希望将状态作为object类型的函数参数接收。毕竟,我的回调已经是Actor的一部分,可以直接访问状态。因此,对象作为参数的要求似乎是多余的。

当前的想法

一个可能的原因是,这允许我们将actor状态提供给不属于actor的回调(这甚至可能)。这是唯一的原因吗?或者,在使用计时器激活方法处理状态时,我是否应该考虑其他因素?

1 个答案:

答案 0 :(得分:5)

就我所见(我自己并没有那么多使用过ActorTimers),它不是通常传递的实际演员状态(因为你已经有了),但是你正在调用的函数的参数。

一个例子就是这个演员:https://github.com/Azure-Samples/service-fabric-dotnet-iot/blob/master/src/actors/StorageActor/StorageActor.cs

在这里,他们通过“假”&#39;作为“状态”#39;在注册计时器时,这个.SaveToStorage,但是稍后(在OnDeactivateAsync中),他们用true调用相同的this.SaveToStorage。