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