public async Task update(IEnumerable <int> types, IEnumerable <int> regions) { Task consumer = Task.Factory.StartNew(() => consume()); //var types = // StaticDataContext.invTypes.Where( // e => e.typeID < 350000 && e.published == true && e.marketGroupID != null).AsNoTracking(); Console.WriteLine("Fetching: " + types.Count()); DateTime timer = DateTime.UtcNow; var tasks = new List <Task>(); int processed = 0; foreach (var region in regions) { Console.WriteLine("RegionId: " + region); foreach (var typeId in types) { DateTime now = DateTime.UtcNow; //var typeId = type.typeID; EveData.MarketData.MarketHistoryEntry latest; using (var marketDataContext = new EveMarketDataContext()) { latest = marketDataContext.MarketHistoryEntries.AsNoTracking() .Where(e => e.TypeId == typeId) .OrderByDescending(e => e.Date) .FirstOrDefault(); } if (latest != null && latest.Date.Date >= now.Date.AddDays(-1)) { continue; } tasks.Add(produce(region, typeId, latest)); ++processed; if (processed % 100 == 0) { Console.WriteLine("Processed: " + processed); } if (tasks.Count == 10) { Task.WaitAll(tasks.ToArray()); tasks.Clear(); double timeSpent = (DateTime.UtcNow - timer).TotalMilliseconds; var sleepTimer = (int)(1000 - timeSpent); if (sleepTimer > 0) { Thread.Sleep(sleepTimer); } timer = DateTime.UtcNow; } } } Task.WaitAll(tasks.ToArray()); Queue.CompleteAdding(); await consumer; }
private static async Task insert(ConsumerTask task) { foreach (var historyEntry in task.Entries) { using (var marketDataContext = new EveMarketDataContext()) { marketDataContext.Configuration.AutoDetectChangesEnabled = false; marketDataContext.Configuration.ValidateOnSaveEnabled = false; marketDataContext.MarketHistoryEntries.Add(map(task.TypeId, task.RegionId, historyEntry)); await marketDataContext.SaveChangesAsync().ConfigureAwait(false); } } }
private async Task <IEnumerable <MarketHistoryEntry> > getCrestItemHistoryAsync(int region, IEnumerable <int> types, int dayLimit) { var updater = new MarketHistoryUpdater(); await updater.update(types, new[] { region }); List <EveData.MarketData.MarketHistoryEntry> list; using (var marketDataContext = new EveMarketDataContext()) { var limit = DateTime.UtcNow.AddDays(-dayLimit); list = await marketDataContext.MarketHistoryEntries.AsNoTracking() .Where(e => types.Contains(e.TypeId) && e.Date > limit) .ToListAsync() .ConfigureAwait(false); } return(list.Select(MarketHistoryEntry.Create)); }