private async Task DoProcess()
        {
            List <BidAsk> buffer;

            lock (_gate)
            {
                if (!_buffer.Any())
                {
                    return;
                }

                buffer  = _buffer;
                _buffer = new List <BidAsk>(128);
            }

            var taskList = new List <Task>();

            foreach (var group in buffer.GroupBy(e => e.Id))
            {
                var last = @group.OrderByDescending(e => e.DateTime).First();
                var task = _writer.InsertOrReplaceAsync(BidAskNoSql.Create(last));
                taskList.Add(task.AsTask());

                _logger.LogInformation("Quote: {brokerId}:{symbol} {bid} | {ask} | {timestampText}", last.LiquidityProvider, last.Id, last.Bid, last.Ask, last.DateTime.ToString("O"));
            }

            if (taskList.Any())
            {
                await Task.WhenAll(taskList);
            }
        }
        public List <BidAsk> GetPrices(string brokerId)
        {
            var list = _reader.Get(BidAskNoSql.GeneratePartitionKey(brokerId));

            return(list.Select(e => e.Quote).ToList());
        }
        public BidAsk GetPrice(string brokerId, string symbol)
        {
            var price = _reader.Get(BidAskNoSql.GeneratePartitionKey(brokerId), BidAskNoSql.GenerateRowKey(symbol));

            return(price?.Quote);
        }