private async Task<HtmlDocument> Load(EDish edish, string url, uint level, string path, object userData) { return await Task.Run(() => { var count = 0; while (true) { try { return edish.dish.Load(url, level, path, userData, count++); } catch (Exception ex) { DumpException(ex); if (count > retryCount) { DumpException(new Exception("too much wrong")); return null; } } } }); }
private async Task EatPage(EDish edish, string url, uint level, string path, object userData) { var doc = await Load(edish, url, level, path, userData); if (doc == null) return; if (level > edish.settings.Level) throw new Exception("level"); if (level == edish.settings.Level) { if (!String.IsNullOrWhiteSpace(edish.settings.Ext)) path = Path.ChangeExtension(path, edish.settings.Ext); try { edish.dish.Eat(doc, url, path, userData); } catch (Exception ex) { DumpException(ex); } return; } await EatPage(edish, doc, url, level, path, userData); }
private async Task EatPage(EDish edish, HtmlDocument html, string url, uint level, string path, object userData) { List<Index> index = null; try { index = edish.dish.GetIndex(html, url, level, path, userData); } catch (Exception ex) { DumpException(ex); } if (index == null) return; foreach (var i in index) { string newPath; if (i.name.StartsWith(hyphen)) { newPath = path + i.name; } else { newPath = Path.Combine(path, i.name); } await EatPage(edish, i.url, i.level, newPath, i.userData); } }