删除 Reliable Actors 及其状态

对已停用的执行组件进行垃圾回收只会清除该执行组件对象,但是存储在执行组件的状态管理器中的数据不会被删除。 重新激活执行组件后,可通过状态管理器再次使用其数据。 如果执行组件将数据存储在状态管理器,并且已停用且始终不激活该执行组件,那么可能需要清理其数据。

执行组件服务提供了一个函数,用于从远程调用方删除执行组件:

ActorId actorToDelete = new ActorId(id);

IActorService myActorServiceProxy = ActorServiceProxy.Create(
    new Uri("fabric:/MyApp/MyService"), actorToDelete);

await myActorServiceProxy.DeleteActorAsync(actorToDelete, cancellationToken)
ActorId actorToDelete = new ActorId(id);

ActorService myActorServiceProxy = ActorServiceProxy.create(
    new Uri("fabric:/MyApp/MyService"), actorToDelete);

myActorServiceProxy.deleteActorAsync(actorToDelete);

删除一个执行组件将出现以下结果,具体取决于当前执行组件是否处于活动状态:

  • 活动执行组件
    • 执行组件从活动的执行组件列表中删除并停用。
    • 将永久删除该执行组件的状态。
  • 非活动执行组件
    • 将永久删除该执行组件的状态。

执行组件无法使用其任何一个执行组件方法对其自身调用删除,因为在执行组件调用时执行删除将无法删除该执行组件,在此过程中,运行时已获取该执行组件的锁,用于强制实施单线程访问。

有关 Reliable Actors 的详细信息,请阅读以下内容: