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