如何实现此异步工作流程?

时间:2016-10-31 17:04:14

标签: c# .net asynchronous parallel-processing async-await

我正在使用像

这样的功能开发一个Web应用程序来浏览网络论坛的页面
public IEnumerable<HtmlDocument> GetPages(int pageNumMax = Int32.MaxValue)
{
    for(int i = 0; i <= pageNummax; ++i)
    {
        var pagedoc = GetHtmlFromUrl($"http://someforum.com?page={i}"); 
        if(pagedoc == null) // couldn't get; assume page doesn't exist
            yield break;
        else
            yield return pagedoc;
    }
}

我想要两个包装功能

public HtmlDocument GetFirstPage()
{
    return GetPages(0).SingleOrDefault();
}

public IEnumerable<HtmlDocument> FullScan()
{
    return GetPages();
}

以这样的方式运行

  • 每5分钟运行一次FullScan,或者如果最后一次FullScan在5分钟后没有完成,请在完成后再次运行
  • 每10秒运行GetFirstPage,或者如果当前有超过3个运行,请等到1完成后再运行下一个。

问题:

  • 这可能吗?
  • 我将如何实施?
  • 我随意选择了3号。如何确定运行GetFirstPage
  • 的线程数的更好限制

0 个答案:

没有答案