public async Task Scrape <TEntity>() where TEntity : Product, new() { IProductService <TEntity> _productService = (IProductService <TEntity>)_serviceProvider.GetService(typeof(IProductService <TEntity>)); var parsedProducts = new List <TEntity>(); foreach (var shop in _Shops) { nextPage = true; var pageNumber = 0; var p = new BaseParser(); p.Stop += ScrapeNextPage; while (nextPage) { pageNumber++; var productData = await _productDataProvider.GetProductData <TEntity>(shop, pageNumber); var parser = ShopProductParserFactory.GetShopParserInstance <TEntity>(shop); var productsList = parser.ParseHtmlStringToProducts <TEntity>(productData); if (productsList.Count == 0) { ScrapeNextPage(this, EventArgs.Empty); } else { parsedProducts.AddRange(productsList); } } } await _productService.SaveProducts(parsedProducts); }