我想对 C# 5 中引入的这些新关键字进行一些实验。我有兴趣研究如何以并发方式分配工作。我会更自然地使用线程池来做这件事,但有兴趣对这种新的异步模式做同样的事情。
所以这是我的玩具示例,我正在编写一个爬虫,它将从 n 个根站点爬取并进一步跟踪链接。有没有什么好的并发模式来编写这个应用程序。
我想对 C# 5 中引入的这些新关键字进行一些实验。我有兴趣研究如何以并发方式分配工作。我会更自然地使用线程池来做这件事,但有兴趣对这种新的异步模式做同样的事情。
所以这是我的玩具示例,我正在编写一个爬虫,它将从 n 个根站点爬取并进一步跟踪链接。有没有什么好的并发模式来编写这个应用程序。
无论使用哪种线程技术,您都需要一名经理将工作负载分配给各个工作人员。管理器将创建 1-N 个工作进程。在工作进程中,他们将执行您选择的目标线程化方法。
我建议您创建一个接口,这些工作人员中的每一个都需要遵守该接口,并在接口内指定一个采用 url 的启动方法、一个可能的错误条件,这些条件是公开的并且可以检查,停止进程的能力和一种在工作完成后在没有错误的情况下传递数据的方法。最后是一个状态,例如枚举,关于它当前是否正在工作、停止或因错误而停止。
然后,管理器可以通过传递目标 URL 并将工作单元放入自己的内部队列来简单地创建每个进程。然后,经理通过队列寻找将自己标记为已完成的项目,然后将数据交给 GUI(?)以显示给最终用户。
那么这个新的异步等待模式将如何适应它呢?您只需在工作人员类中使用 async await 进行调用并根据需要处理数据。管理器不需要知道,因为类通过接口方法与管理器通信。
以下是一些帮助您开始使用异步等待模式的文档: