Поделиться через


Удаление субъектов 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 см. в следующих документах: