/// <summary> /// Only use this if you missed to fetched some trades on some day. This will not include the trades /// </summary> public async Task UpdateAllStock() { var allStocks = await _investagramsApiService.GetAllActiveStockPriceRealTime(); var charts = new Dictionary <string, ChartHistory>(); var tasks = new List <Task>(); foreach (var stock in allStocks) { tasks.Add(Task.Run(async() => await _investagramsApiService.GetChartHistoryByDate(stock.StockId, DateTime.Now)) .ContinueWith(x => charts.Add(stock.StockCode, x.Result))); } Task.WaitAll(tasks.ToArray()); foreach (var chartHistory in charts) { try { var lastDate = chartHistory.Value.Dates.Last(); var allStockHistory = _stockHistoryRepository.Find(x => x.StockCode == chartHistory.Key && x.Date >= lastDate).ToList(); var index = 0; foreach (var date in chartHistory.Value.Dates) { var stockHistory = allStockHistory.FirstOrDefault(x => x.Date == date); if (stockHistory == null) { _stockHistoryRepository.Add(new StockHistory { StockCode = chartHistory.Key, Last = chartHistory.Value.Closes[index], Date = date, Low = chartHistory.Value.Lows[index], Open = chartHistory.Value.Opens[index], High = chartHistory.Value.Highs[index], Volume = chartHistory.Value.Volumes[index] }); } index++; } _stockHistoryRepository.SaveChanges(); } catch (System.Exception ex) { //carry on if something happens from upsert } } }