参与者计时器 - 注册计时器参数 - 为什么是 Func<对象、任务>而不是 Func

本文关键字:Func 计时器 Task 任务 对象 为什么 注册 参与者 参数 | 更新日期: 2023-09-27 18:36:12

Actor中注册计时器的签名是:

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

问题:

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

当前的想法

一个可能的原因是,这允许我们为不属于参与者的回调提供参与者状态(这甚至可能吗)。这是唯一的原因吗?或者,在处理计时器激活方法的状态时,我是否应该有其他注意事项?

参与者计时器 - 注册计时器参数 - 为什么是 Func<对象、任务>而不是 Func<Task>

据我所知(我自己没有那么多使用ActorTimers),通常传递的不是实际的actor状态(因为你已经有了),而是你正在调用的函数的参数。

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

在这里,他们将"假"作为"状态"传递给此。在注册计时器时保存存储,但稍后(在 OnDeactivateAsync 中),他们调用相同的内容。保存到存储与真实。