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); }
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)); } }