据我所知,Service Fabric的演员模型仅支持“请求 - 回复”式通信。有什么方法可以实现“即发即忘”式的沟通吗? (例如:像Akka中的“ask”vs“tell”消息一样?)
我参与了这篇博客文章(http://mikhail.io/2016/01/fire-and-forget-in-service-fabric-actors/),但我不确定这是否会产生任何负面影响,或者是否有推荐的方法来实现这一目标?
答案 0 :(得分:1)
对你的演员有一个初始化方法,可以为你的任务提供所需的任何内容。设置计时器并从initialize方法返回。当计时器触发时,关闭计时器,并运行逻辑Fire和Forget,保证您的工作已执行。下面粗略的样本。
public class SomeActor : Actor, ISomeActor
{
private IActorTimer _sendTimer;
protected override async Task OnActivateAsync()
{
await base.OnActivateAsync();
}
protected override async Task OnDeactivateAsync()
{
await this.ExecuteAgents();
await base.OnDeactivateAsync();
}
public Task Initialize()
{
if (_sendTimer == null)
{
//setup timer
_sendTimer = this.RegisterTimer((obj) =>
{
return this.Execute();
},
null,
TimeSpan.FromSeconds(1),
TimeSpan.FromSeconds(30));
}
}
private async Task ExecuteAgents()
{
this.UnegisterTimer(_sendTimer);
//Perform workload
}
}