public virtual void Register <T>(Action <T> action) where T : class
        {
            var  handlesType = HandleValueTypeMessage(typeof(T));
            bool decorateActorWithMailbox = LocalConcurrencyType.OneThreadPerActor == this.LocalConcurrencyType;
            bool isManyThreads            = LocalConcurrencyType.OneActorPerThread == this.LocalConcurrencyType;

            IActor anonActor = new AnonActor <T>(action);

            if (decorateActorWithMailbox)
            {
                anonActor = new MailBoxActor(anonActor);
            }
            //else
            //   anonActor = new AnonActor<T>(action);

            // For invocation return the anonActor we just created always.
            ActorInvocationBase invoker = new ActorInvocation <IActor>(() => anonActor);

            //NOTE: for anonymouse Actions the actor type is the same as the message type
            if (!_actorTypeToInstatiation.TryAdd(handlesType, invoker))
            {
                throw new FailedToRegisterActorInvocationForActionException(handlesType.ToString());
            }

            if (!_messageTypeToActor.TryAdd(handlesType, anonActor))
            {
                throw new FailedToRegisterActionForTypeException(handlesType.ToString());
            }

            uint iterationCount = (isManyThreads) ? this.Concurrency : 1;

            try { _actorRegistered.Set(); }
            catch (SemaphoreFullException) { }
        }
        public void Register <T>(Action <T> action) where T : class
        {
            IActor            anonActor   = new AnonActor <T>(action);
            ILocalSwitchboard switchBoard = new LocalSwitchboard(LocalConcurrencyType.OneActorPerThread);

            switchBoard.Operator = this.Operator;
            _actorToSwitchBoard.TryAdd(anonActor.GetType(), switchBoard);

            switchBoard.Register(action);
            foreach (var t in _exceptionTypeToHandler)
            {
                switchBoard.Register(t.Key, t.Value);
            }
            // for each T we create a new LocalSwitchboard that only operates on that type T
        }