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);
         }
     }
 }
Beispiel #3
0
        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));
        }