public void Suspend(Fixture fixture, SuspensionReason reason = SuspensionReason.FIXTURE_DISPOSING)
        {
            var fixtureId = fixture.Id;

            Action <IMarketStateCollection> action;

            switch (reason)
            {
            case SuspensionReason.FIXTURE_DISPOSING:
                action = _disposing;
                break;

            case SuspensionReason.DISCONNECT_EVENT:
                action = _disconnected;
                break;

            case SuspensionReason.FIXTURE_DELETED:
                action = _fixtureDeleted;
                break;

            case SuspensionReason.FIXTURE_ERRORED:
                action = _error;
                break;

            default:
                action = _default;
                break;
            }

            IMarketStateCollection state = _stateProvider.GetMarketsState(fixtureId);

            if (state == null)
            {
                _logger.WarnFormat("State is not present for fixtureId={0} - can't suspend with reason={1}",
                                   fixtureId, reason);
                return;
            }

            _logger.InfoFormat("Performing suspension for fixtureId={0} due reason={1}", fixtureId, reason);

            try
            {
                action(state);
            }
            catch (Exception e)
            {
                _logger.Error($"An error occured while performing suspend action on fixtureId={fixtureId}", e);
                throw new PluginException($"Plugin Suspend Fixture with fixtureId={fixtureId} error occured", e);
            }
        }