Löschen von Reliable Actors und deren Zustand
Eine Garbage Collection von deaktivierten Actors bereinigt nur das Actor-Objekt, entfernt jedoch keine Daten, die im Zustands-Manager eines Actors gespeichert sind. Wenn ein Actor reaktiviert wird, werden seine Daten durch den Zustands-Manager wieder zur Verfügung gestellt. Wenn Actors Daten im Zustands-Manager speichern und dann deaktiviert, aber nicht wieder aktiviert werden, kann eine Bereinigung ihrer Daten nötig sein.
Der Actordienst bietet auch eine Funktion zum Löschen von Actors über einen Remoteanrufer:
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);
Das Löschen eines Actors hat die folgenden Auswirkungen, abhängig davon, ob der Actor derzeit aktiv ist oder nicht:
- Aktiver Actor
- Der Actor wird aus der Liste der aktiven Actors entfernt und deaktiviert.
- Sein Zustand wird dauerhaft gelöscht.
- Inaktiver Actor
- Sein Zustand wird dauerhaft gelöscht.
Ein Actor kann „delete“ nicht über eine seiner Actormethoden für sich selbst aufrufen, da er nicht gelöscht werden kann, während er in einem Actoraufrufkontext ausgeführt wird, in dem die Laufzeit eine Sperre für den Actoraufruf erwirkt hat, um einen Singlethread-Zugriff zu erzwingen.
Weitere Informationen zu Reliable Actors finden Sie hier: