Actor定时器 - 注册定时器参数 - 为什么Func <object,Task>而不是Func <Task>

Mau*_*les 4 .net c# timer azure azure-service-fabric

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

IActorTimer RegisterTimer(Func<object, Task> asyncCallback, object state, TimeSpan dueTime, TimeSpan period);
Run Code Online (Sandbox Code Playgroud)

题:

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

目前的想法

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

and*_*rso 5

据我所知(我自己没有使用过很多ActorTimers),它不是通常传递的实际actor状态(因为你已经可以使用),而是你正在调用的函数的参数.

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

这里他们在注册计时器时将'false'作为'state'传递给this.SaveToStorage,但是稍后(在OnDeactivateAsync中),他们用true调用相同的this.SaveToStorage.