DAPR 演员一生 - 优雅停止

问题描述 投票:0回答:1

假设我有一个 DAPR actor 实现,它涵盖了在单线程循环中实现的长时间运行的操作。演员有两个职责:

  • 当 actor 创建时 - 它还创建单线程循环
  • 当调用 actor 操作时 - 它会唤醒单线程循环

类似这样的:

// there can be only one TenantActorWorker
// services.AddTransient<ITenantActorWorker, TenantActorWorker>();

public class TenantActor : Actor
{
    private ITenantWorker _worker;

    public TenantActor(ActorHost host, ITenantWorker worker)
        : base(host)
    {
        this._worker = worker;
    }

    public void Process(String tenantId)
    {
        _worker.WakeUpOrStartFor(tenantId);
    }
    
    // ??? how to implement this ??? - there is no "StopActor" like method
    public override void StopActor()
    {
       _worker.Cancel();
    }
}

worker实例按原样实现,这里并不重要。重要的是,我必须警告它演员已停用 - 因此也停止处理长操作。是否有任何通知让 Actor 实例在停用(或者最糟糕的是:被重新定位)之前发出警告?

lifetime actor dispose dapr
1个回答
0
投票

看来

protected override Task OnDeactivateAsync()
可以解决问题。

© www.soinside.com 2019 - 2024. All rights reserved.