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