如何在C#中实现此并行模式?

时间:2016-11-20 02:57:42

标签: c# .net asynchronous parallel-processing task

我最终想要实现的目标是从GetPage(i)返回页面i的HTML的未知但有限数量的网页中获取HTML,我想尽快停止我发现了一个非页面。

我想要的确切模式是这样的:

  • 启动N,...,GetPage(0)的{​​{1}}个并行任务。
  • 一旦任务GetPage(N-1)完成,如果任务能够获取该页面,则将其添加到页面集合中并尝试获取尚未尝试处理的下一个最大页面然而;或者,如果任务无法获取该页面,请取消所有GetPage(i) GetPage(j) {}}的任务。{/ li>

所以我尝试的实现就像

j>i

1 个答案:

答案 0 :(得分:0)

这可能就是你要找的东西。它将并行和异步处理您的文档,可能从最大的文档开始(尽管不保证)。如果你真的想要去最大的那个,那么你将不得不进行相当多的调整。而且我不确定你是否会最终使用并行处理进行并行处理,这意味着你可以在决定首先处理什么方面给予机器更多的控制权:

var docs = new List<XmlDocument>();

            var tasks = docs.OrderBy(p => p.InnerXml.Length).Select(file => Task.Run(async () =>
           {
               await BoardScanner.GetBoardPage(file);
                 // your document treatment logic here
             }
                 ));

            await Task.WhenAll(tasks);
            // your logic upon all of your documents were treated;