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 の詳細については、以下を参照してください。