public void CheckUpdate() { if (CurrentBook.IsTxt) { return; } if (CurrentBook.IsOnline) { Task.Run(async() => { try { var catalogPageUrl = AnalisysSourceHelper.GetCatalogPageUrl(CurrentBook.NewestChapterUrl); var catalogData = await AnalisysSourceHelper.GetCatalogPageData(catalogPageUrl, CurrentBook.BookId); var lastWebCatalog = catalogData?.Item1?.LastOrDefault(); if (lastWebCatalog == null) { return; } if (lastWebCatalog.CatalogUrl == CurrentBook.NewestChapterUrl) { return; } DispatcherHelper.CheckBeginInvokeOnUI(() => { CurrentBook.IsNew = true; CurrentBook.NewestChapterName = lastWebCatalog.CatalogName; CurrentBook.NewestChapterUrl = lastWebCatalog.CatalogUrl; ViewModelInstance.Instance.LocalBookPage.InserOrUpdateBook(CurrentBook); }); } catch (Exception e) { Console.WriteLine(e); } }).ContinueWith((result) => { if (IsDeleted) { return; } }); } else if (CurrentBook.IsLocal) { Task.Run(async() => { try { var localCatalogs = DbLocalBook.SelectBookCatalogsByBookId(AppDataPath.GetLocalBookDbPath(), CurrentBook.BookId); var localLastCatalog = localCatalogs.LastOrDefault(); if (localLastCatalog != null) { DispatcherHelper.CheckBeginInvokeOnUI(() => { CurrentBook.NewestChapterName = localLastCatalog.CatalogName; CurrentBook.NewestChapterUrl = localLastCatalog.CatalogUrl; }); } var catalogPageUrl = AnalisysSourceHelper.GetCatalogPageUrl(CurrentBook.NewestChapterUrl); var catalogData = await AnalisysSourceHelper.GetCatalogPageData(catalogPageUrl, CurrentBook.BookId); var lastWebCatalog = catalogData?.Item1?.LastOrDefault(); if (lastWebCatalog == null) { return; } if (localCatalogs == null || localCatalogs.Count == 0) { NeedUpdateCatalogs = catalogData.Item1; } if (localLastCatalog == null) { return; } if (lastWebCatalog.CatalogUrl == localLastCatalog.CatalogUrl) { return; } var tempCatalog = catalogData.Item1.LastOrDefault(p => p.CatalogUrl == localLastCatalog.CatalogUrl); var tempList = catalogData.Item1.Skip(tempCatalog.Index).ToList(); NeedUpdateCatalogs = tempList; } catch (Exception e) { Console.WriteLine(e); } finally { DispatcherHelper.CheckBeginInvokeOnUI(() => { NeedUpdateCount = NeedUpdateCatalogs == null ? "" : NeedUpdateCatalogs?.Count.ToString(); }); } }).ContinueWith((result) => { if (IsDeleted) { return; } if (NeedUpdateCatalogs == null || NeedUpdateCatalogs.Count == 0) { return; } DispatcherHelper.CheckBeginInvokeOnUI(() => { NeedUpdateCount = NeedUpdateCatalogs.Count.ToString(); CurrentBook.IsNew = true; CurrentBook.NewestChapterName = NeedUpdateCatalogs.LastOrDefault()?.CatalogName; CurrentBook.NewestChapterUrl = NeedUpdateCatalogs.LastOrDefault()?.CatalogUrl; DbLocalBook.InsertOrUpdatBook(AppDataPath.GetLocalBookDbPath(), CurrentBook); }); StartUpdate(); }); } }
public async void StartUpdate() { try { var taskCount = 3; var groups = NeedUpdateCatalogs.Split <BookCatalog>(taskCount); var enumerable = groups as IEnumerable <BookCatalog>[] ?? groups.ToArray(); if (groups == null || !enumerable.Any()) { return; } IsUpdating = true; var tasks = new Task[enumerable.Length]; for (var i = 0; i < enumerable.Length; i++) { if (IsDeleted) { break; } tasks[i] = await Task.Factory.StartNew(async() => { var catalogs = enumerable[i]; foreach (var bookCatalog in catalogs) { try { if (IsDeleted) { break; } bookCatalog.CatalogContent = await AnalisysSourceHelper.GetCatalogContent(bookCatalog.CatalogUrl); } catch (Exception e) { Console.WriteLine(e); } finally { lock (_obj) { DispatcherHelper.CheckBeginInvokeOnUI(() => { NeedUpdateCount = (int.Parse(NeedUpdateCount) - 1).ToString(); }); } } } }); } await Task.Factory.ContinueWhenAll(tasks, (obj) => { DbHelper.AddDbOperator(new Action(() => { var reslut = DbLocalBook.InsertOrUpdateBookCatalogs(AppDataPath.GetLocalBookDbPath(), NeedUpdateCatalogs); })); DispatcherHelper.CheckBeginInvokeOnUI(() => { NeedUpdateCount = ""; }); }); } catch (Exception e) { Console.WriteLine(e); } finally { IsUpdating = false; } }