private async Task GetProductsAsync() { var productSync = new ProductParser(_skApi, _cts.Token); productSync.ProductInfoUpdated += OnProductInfoUpdatedHandler; var enabledSubchapters = FiltersManagerVM.FiltersVM.GetEnabledSubchapter(); TotalSubchapter = enabledSubchapters.Count; for (var i = 0; i < enabledSubchapters.Count; i++) { _cts.Token.ThrowIfCancellationRequested(); CurrentSubchapterNumber = i + 1; var subchapter = enabledSubchapters.ElementAt(i); CurrentSubchapterTitle = subchapter.Name; Status = "Раздел: " + CurrentSubchapterTitle + " " + CurrentSubchapterNumber + "/" + enabledSubchapters.Count; ProductProcessingStatus = "Получение складчин из раздела..."; var productsFromSubchapter = await GetPartialProductsFromSubchapterAsync(subchapter.Id).ConfigureAwait(false); var filteredProducts = FiltrationPartialProducts(productsFromSubchapter); var productsFromDb = await GetSubchapterProductsFromDbAsync(subchapter.Id).ConfigureAwait(false); var products = new List <Product>(); var goodProductsFromDb = new List <Product>(); _dbGoodProductsCountOfChapter = 0; var productsWithChangedViewsCount = new List <Product>(); for (int j = 0; j < filteredProducts.Count; j++) { _cts.Token.ThrowIfCancellationRequested(); var product = filteredProducts.ElementAt(j); var productFromDb = FindSimilarDbProduct(productsFromDb, product); if (productFromDb == null) { products.Add(product); } else { if (productFromDb.ViewCount != product.ViewCount) { productsWithChangedViewsCount.Add(product); } //Проверяем складчину из БД if (Filters.IsGoodProduct(productFromDb, FiltersManagerVM.FiltersVM.Model)) { ++_dbGoodProductsCountOfChapter; goodProductsFromDb.Add(productFromDb); } } } await AddToResultsAsync(goodProductsFromDb).ConfigureAwait(false); productSync.ProductUpdateInfo(products); if (UpdateViewCount) { await Db.Products.UpdateViewCountAsync(productsWithChangedViewsCount).ConfigureAwait(false); } } }