Akka.Tests.Actor.SupervisorHierarchySpec.A_supervisor_hierarchy_must_Restart_Manager_And_Workers_In_AllForOne C# (CSharp) Méthode

A_supervisor_hierarchy_must_Restart_Manager_And_Workers_In_AllForOne() private méthode

        public void A_supervisor_hierarchy_must_Restart_Manager_And_Workers_In_AllForOne()
        {
            var countDown = new CountdownEvent(4);
            SupervisorStrategy strategy = new OneForOneStrategy(_ => Directive.Restart);
            var boss = ActorOf(Props.Create(() => new Supervisor(strategy)), "boss");

            Func<Exception, Directive> decider = _ => { return Directive.Escalate; };
            var managerProps = new PropsWithName(Props.Create(() => new CountDownActor(countDown, new AllForOneStrategy(decider))), "manager");
            var manager = boss.Ask<IActorRef>(managerProps, TestKitSettings.DefaultTimeout).Result;

            var workerProps = Props.Create(() => new CountDownActor(countDown, SupervisorStrategy.DefaultStrategy));
            var worker1 = manager.Ask<IActorRef>(new PropsWithName(workerProps, "worker1"), TestKitSettings.DefaultTimeout).Result;
            var worker2 = manager.Ask<IActorRef>(new PropsWithName(workerProps, "worker2"), TestKitSettings.DefaultTimeout).Result;
            var worker3 = manager.Ask<IActorRef>(new PropsWithName(workerProps, "worker3"), TestKitSettings.DefaultTimeout).Result;

            EventFilter.Exception<ActorKilledException>().ExpectOne(() =>
            {
                worker1.Tell(Kill.Instance);
                // manager + all workers should be restarted by only killing a worker
                // manager doesn't trap exits, so boss will restart manager

                countDown.Wait(TimeSpan.FromSeconds(5)).ShouldBe(true);

            });

        }