public async Task ProcessStreamItem(StreamTrade trade)
        {
            StreamTrade currentTrade = null;
            bool        found        = _trades.TryGetValue(trade.Id, out currentTrade);

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

            case StreamOperation.Delete:
                if (found)
                {
                    if (_persistenceLayer != null)
                    {
                        await _persistenceLayer.ProcessStreamItem(trade);
                    }
                    _trades.TryRemove(trade.Id, out currentTrade);
                }
                break;

            default:
                break;
            }
        }
 public virtual Task TradeUpdated(StreamTrade streamItem)
 {
     return(Task.CompletedTask);
 }
 public override Task TradeUpdated(StreamTrade streamItem)
 {
     return(_dataLayer.ProcessStreamItem(streamItem));
 }