Создание веб-API в .net Core для обработки большого числа записей Parallel - PullRequest
0 голосов
/ 21 декабря 2018

Я разрабатываю API для обработки около 25000 записей.Для каждой записи мне нужно вызывать другой API, который будет возвращать дополнительную информацию для каждого продукта. Эти данные должны быть обновлены в моей базе данных

Проблема в том, что я обрабатываю большое количество записей, и другой APIвызывается внутри моего API, время обработки очень высокое и данные могут обрабатываться неправильно.

[Route("GetSymbolDetailsParallel/{Exchange?}/{MarketGuid?}/{Symbol?}")]
public async Task<IActionResult> GetSymbolDetailsParallel(string Exchange = "", string MarketGuid = "", string Symbol = "")
{
   GlobalFunctions objGolobal = new GlobalFunctions();
   MongoClient client = new MongoClient(_ConFigSettings.MongoConnectionString);
   var db = client.GetDatabase(_ConFigSettings.DatabaseName);
   if (!string.IsNullOrEmpty(Symbol) && !string.IsNullOrEmpty(Exchange))
   {
        SymbolsBE objSymbols = db.GetCollection<SymbolsBE>("Symbols").Find(x => x.Symbol == Symbol + '.' + Exchange).FirstOrDefault();
        await objGolobal.getSymbolsDetails(objSymbols, _ConFigSettings);
   }
   else if (!string.IsNullOrEmpty(MarketGuid))
   {
      try
      {
         // Get the List from the MongoDb Database & Pass the list to the  function
          List<SymbolsBE> lstSymbols = db.GetCollection<SymbolsBE>("Symbols").Find(x => x.MarketGuid == MarketGuid 
                                                 && x.isActive == true
                                                 && (x.Fundamental == null || x.Fundamental.Code == "")).ToList();

           GetMultipleFundamentalAsync(lstSymbols, _ConFigSettings);

      }
      catch (Exception ex)
      {

      }
    }      
    return Ok("Sucess"); 
}


public async Task GetMultipleFundamentalAsync(List<SymbolsBE> lst, ConfigSettings _ConFigSettings)
{
  DateTime StartDate = DateTime.Now;
  int cnt = lst.Count;
  for (int i = 0; i < cnt; i++)
  {
     await Task.Factory.StartNew(async () =>
     {

                    await getSymbolsDetails(lst[i], _ConFigSettings);
      });
   }

}
public async Task getSymbolsDetails(SymbolsBE objSymbol, ConfigSettings _ConFigSettings)
{
   // Code Download Details from API using HttpResponseMessage Res = await client.GetAsync(URL)
   // This response will be saved in the Database

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...