いいえ、アクターをアクティブにするために何かが必要です。
お気づきかもしれませんが、Program.cs の実行はサービスのライフサイクルと実際には一致しないため、Program.cs は最適な場所ではありません。
アクター サービスの起動時にいくつかのアクターをアクティブ化する必要がある場合は、アクター サービスの RunAsync メソッドで行うのが適切です。ステートフル サービスを作成するときと同じように、アクター サービスから派生するサービスを作成することで、アクター サービスをカスタマイズできます。
編集:最初に base.RunAsync() を呼び出して待機するようにしてください!
class MyActorService : ActorService
{
public MyActorService(StatefulServiceContext context, ActorTypeInformation typeInfo, Func<ActorBase> newActor)
: base(context, typeInfo, newActor)
{ }
protected async override Task RunAsync(CancellationToken cancellationToken)
{
await base.RunAsync(cancellationToken);
var proxy = ActorProxy.Create<IMyActor>(new ActorId(0));
await proxy.StartDoingStuff();
}
}
次に、アクター サービスを登録して、ランタイムがそれを使用してアクター インスタンスをホストすることを認識できるようにします。
static class Program
{
private static void Main()
{
ActorRuntime.RegisterActorAsync<MyActor>(
(context, actorType) => new MyActorService(context, actorType, () => new MyActor()))
.GetAwaiter().GetResult();
Thread.Sleep(Timeout.Infinite);
}
}
アクター メソッドがべき等であることを確認してください。これは、アクター サービスのプライマリ レプリカが起動されるたびに (フェールオーバー、リソース バランシング、アプリケーションのアップグレードなどの後) 実行されるためです。アクター サービスの準備ができており、サービスが起動すると常に実行されます。
アクター サービスの使用方法の詳細については、https ://azure.microsoft.com/en-us/documentation/articles/service-fabric-reliable-actors-platform/ を参照してください。