Service Fabric长时间运行的过程

时间:2017-03-24 11:48:06

标签: azure-service-fabric

我有一个Web Api无状态服务正在创建一个Actor,它通过提醒执行一些长时间运行的处理(点火和忘记)。它存储自己在当地的进展。由于Actor的单线程特性,我无法获得长时间运行进程的进度,对获取进度的方法的任何调用都将等到长时间运行的进程完成。有没有人有这方面的解决方案(不使用外部数据源)?

2 个答案:

答案 0 :(得分:1)

您可以创建ProgressTrackingActor并定期从现有Actor更新它。查询ProgressTrackingActor以获取进度。

您可以使用ActorReference来指明查询进度的Actor,或使用相同的ActorId值。

答案 1 :(得分:1)

如果您只是希望获得Actor的当前状态而不必等待Actor锁,您实际上可以使用托管Actors的基础ActorService来查询状态而不会中断,或被长时间运行的Actor阻止方法

主持Actors的ActorService实际上只是一个无状态服务(带有一些花哨的东西),你可以用与任何服务通信相同的方式与它进行通信 - 为它添加IService接口并使用{{ 3}}与它交谈。本SO答案显示了如何做到IServiceProxy

如果你想在执行Actor方法的过程中取得进展,可以通过调用How to get state from service fabric actor without waiting for other methods to complete?

强制在长时间运行的exectuion中保存状态更改。