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