public void Execute(IJobExecutionContext context) { var stopwatch = new Stopwatch(); stopwatch.Start(); Logger.Info("开始抓取一号店数据"); var downloadedCategories = new YhdCategoryExtractor().Extract().Result; var needProcessCategories = _CategoryArchiveService.Archive(downloadedCategories).OrderBy(c => c.ProductsUpdateTime); var taskLock = new SemaphoreSlim(initialCount: 1); var tasks = needProcessCategories.Select(async (category, index) => { await taskLock.WaitAsync(); try { var result = await ProcessCategoryAsync(category); //■◆▲●□◇△○ Logger.Info(string.Join(" ", new[]{ string.Format("{0}", index + 1), string.Format("[{0}]{1}", category.Number, category.Name), string.Format("□{0} △{1}", result.Total, result.Changed) })); } catch (Exception e) { Logger.ErrorFormat("处理分类{0}{1}失败", e, category.Name, category.Number); } finally { taskLock.Release(); } }); Task.WaitAll(tasks.ToArray()); Logger.InfoFormat("抓取一号店数据完成,用时{0:0.#}分", stopwatch.Elapsed.TotalMinutes); }
public void Execute(IJobExecutionContext context) { var stopwatch = new Stopwatch(); stopwatch.Start(); Logger.Info("开始抓取一号店数据"); var downloadedCategories = new YhdCategoryExtractor().Extract().Result; var needProcessCategories = _CategoryArchiveService.Archive(downloadedCategories).OrderBy(c => c.ProductsUpdateTime); var taskLock = new SemaphoreSlim(initialCount: 1); var tasks = needProcessCategories.Select(async(category, index) => { await taskLock.WaitAsync(); try { var result = await ProcessCategoryAsync(category); //■◆▲●□◇△○ Logger.Info(string.Join(" ", new[] { string.Format("{0}", index + 1), string.Format("[{0}]{1}", category.Number, category.Name), string.Format("□{0} △{1}", result.Total, result.Changed) })); } catch (Exception e) { Logger.ErrorFormat("处理分类{0}{1}失败", e, category.Name, category.Number); } finally { taskLock.Release(); } }); Task.WaitAll(tasks.ToArray()); Logger.InfoFormat("抓取一号店数据完成,用时{0:0.#}分", stopwatch.Elapsed.TotalMinutes); }