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

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

在 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/

相关文章:

c# - 如何在windows phone 8中解析Json数据

c# - Linq 的 InsertOnSubmit 未添加到变更集

c# - 仅覆盖获取访问器

c# - 空条件运算符兼容性

c# - 套接字与 HttpListener

c# - 如何使用 bool 值作为触发器

c# - 在从 SmtpClient.SendCompleted 事件获得响应之前停止关闭表单

c# - 信号 R 和 windows azure

azure - 运行多容器应用程序时,适用于容器的 Azure Web App 是否支持 ssh 访问?

azure - 是否可以从 Azure 数据工厂中的今天日期减去 x 天数