Пример #1
0
        public TResult Dispatch <TResult>(ISyncAction <TState, TResult> action)
        {
            if (_dispatchDepth <= 0)
            {
                var(nextState, result) = action.Apply(_state);
                SetState(nextState, action);
                return(result);
            }

            throw new InvalidOperationException(
                      $"Reentrant sync actions with result are not allowed ({action}).");
        }
Пример #2
0
        public void Dispatch(ISyncAction <TState> action)
        {
            if (_dispatchDepth <= 0)
            {
                DoDispatch();
            }
            else
            {
                _dispatchQueue.Enqueue(DoDispatch);
            }

            Task DoDispatch()
            {
                var nextState = action.Apply(_state);

                SetState(nextState, action);
                return(Task.CompletedTask);
            }
        }