Exemplo n.º 1
0
        public Activation_New(Fixture fx, Placement placement)
        {
            _fx         = fx;
            _placement  = placement;
            _serializer = fx.Serializer;
            _scheduler  = new GrainTaskScheduler(fx.Scheduler, fx.Exceptions);
            _runner     = new RequestRunner(_scheduler, fx.Exceptions, fx.Requests, true); //default isolation???
            _timers     = new MockTimerRegistry(_scheduler);
            _receivers  = new StreamReceiverRegistry(_serializer);
            _storage    = fx.Stores.GetStorage(placement);
            _reminders  = fx.Reminders.GetRegistry(placement);

            Placement  = placement;
            Dispatcher = new ActivationDispatcher(_runner, CreateGrainContext);
        }
Exemplo n.º 2
0
        public Task <TResult> Dispatch <TResult>(Func <IGrainContext, Task <TResult> > fn, RequestMode mode = RequestMode.Unspecified)
        {
            IActivationDispatcher disp = null;

            lock (_sync) {
                disp = _disp ?? (_disp = _dispFac(_placement));
            }

            try {
                return(disp.Perform(fn, mode));
            }
            catch (DeactivatedException) {
                lock (_sync) _disp = null;
                return(Dispatch(fn, mode));
            }
        }