protected virtual void SwitchState(VclHandler handler, VclBackendAction action)
            {
                if (!ValidTransitionStates.Contains(action))
                {
                    throw new InvalidOperationException($"Invalid attempt to transition back-end from {State} to {action}.");
                }

                handler.Logger?.LogDebug($"Backend state transition from {State} to {action}");
                handler._currentBackendState = VclBackendHandlerStateFactory.Get(action);
            }
        public async Task <VclBackendAction> ProcessBackendFetchAsync(VclContext context)
        {
            _backendAttempt      = -1;
            _currentBackendState = VclBackendHandlerStateFactory.Get(VclBackendAction.Retry);

            while (_currentBackendState.State != VclBackendAction.Abandon &&
                   _currentBackendState.State != VclBackendAction.Deliver)
            {
                await _currentBackendState.ExecuteAsync(this, context).ConfigureAwait(false);
            }

            return(_currentBackendState.State);
        }