private IEnumerable <ICab> CabsPourCompte(CompteCab compte, ITaskObserver observer) { observer.NotifyProgress(this, 0); var cabs = new List <ICab>(); string pageRacine = OuvrirPage(RequêteDossierRacine(compte), observer.InSlice(0, 7)); cabs.AddRange(CabsPourPage(pageRacine, compte.Editeur, observer.InSlice(7, 10))); ITaskObserver loopObs = observer.InSlice(10, 100); var matches = _RegexDossier.Matches(pageRacine); var slices = loopObs.GetSlices(matches.Count).GetEnumerator(); foreach (Match mDossier in matches) { ITaskObserver sliceObs = loopObs.InSlice(slices.Current); var gDossier = mDossier.Groups["url_rep"]; if (gDossier != null && !String.IsNullOrEmpty(gDossier.Value)) { string dossier = gDossier.Value; string pageDossier = OuvrirPage(RequêteDossier(compte, dossier), sliceObs.InSlice(0, 70)); if (!String.IsNullOrEmpty(pageDossier)) { cabs.AddRange(CabsPourPage(pageDossier, compte.Editeur, sliceObs.InSlice(70, 100))); } } slices.MoveNext(); } observer.NotifyProgress(this, 100); return(cabs); }