private async Task ProcessRequest(ConcurrentQueue <MarketRequest> requests) { while (requests.TryDequeue(out var request)) { try { FileWriter fileWriter; Log.Information($"Downloader.ProcessRequest(): Downloading {request.DataType} for {request.MarketSymbol.Symbol} from {request.StartDate} to {request.EndDate}"); switch (request.DataType) { case DataType.Fundamental: var fundamentalMessage = await _level1Client.GetFundamentalSnapshotAsync(request.MarketSymbol.Symbol); var fundamentalData = new FundamentalData(DateTime.Now.Date, fundamentalMessage.ToCsv()); fileWriter = new FileWriter(_dataDirectory, request.MarketSymbol, DataType.Fundamental); fileWriter.Write(new List <HistoricalData>() { fundamentalData }); break; case DataType.Tick: case DataType.Daily: var filename = await GetMarketFilename(request); fileWriter = new FileWriter(_dataDirectory, request.MarketSymbol, request.DataType); var historicalData = GetData(request, filename); fileWriter.Write(historicalData); File.Delete(filename); break; default: throw new NotSupportedException("DataType not yet supported."); } } catch (Exception e) { Log.Error($"{request.MarketSymbol.Symbol} Error: {e}"); } } }