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; } }