public async Task ProcessStreamItem(StreamMarket market)
        {
            StreamMarket currentMarket = null;
            bool         found         = _markets.TryGetValue(market.Id, out currentMarket);

            switch (market.Operation)
            {
            case StreamOperation.Insert:
            case StreamOperation.Update:
                if (!found || currentMarket.Compare(market) != 0)
                {
                    if (_persistenceLayer != null)
                    {
                        await _persistenceLayer.ProcessStreamItem(market);
                    }
                }
                _markets[market.Id] = market;
                break;

            case StreamOperation.Delete:
                if (found)
                {
                    if (_persistenceLayer != null)
                    {
                        await _persistenceLayer.ProcessStreamItem(market);
                    }
                    _markets.TryRemove(market.Id, out currentMarket);
                }
                break;

            default:
                break;
            }
        }