使用async / await模式下载多个文档

时间:2013-01-21 12:39:28

标签: c# concurrency async-await

我想体验一下C#5中引入的这些新关键字。我有兴趣研究如何以并发方式分配工作。我会更自然地使用线程池来做这件事,但有兴趣对这个新的异步模式做同样的事情。

所以这是我的玩具示例,我正在编写一个爬虫程序,它将从n个根站点爬行并进一步跟踪链接。是否有任何良好的并发模式来编写这个应用程序。

1 个答案:

答案 0 :(得分:1)

无论使用何种线程技术,您都需要经理将工作负荷分发给各个员工。经理将创建1-N个工作进程。在工作进程中,他们将执行您选择的目标线程化方法。

我建议您创建一个接口,每个这些工作人员都需要遵守这个接口,并在接口内指定一个接受url的start方法,一个可以检查的可能错误条件,可以检查,停止的能力假设没有错误,在完成工作时传递数据的过程和方法。最后是一个状态,例如枚举,关于它当前是否正在工作或停止或停止有错误。

然后管理员可以通过切换目标URL并将工作单元放入其自己的内部队列来简单地创建每个进程。然后管理员通过队列查找标记为已完成的项目,然后将数据移交给GUI(?)以显示给最终用户。

那么这个新的异步等待模式将如何适应它呢?您只需在工作类中使用async await进行调用,并根据需要处理数据。管理员不需要知道,因为类通过接口方法与管理器通信。

以下是一些文档,可帮助您开始使用异步await模式:

The Task-Based Async Await Pattern(下载单词)作者:Stephen Toub

Asynchronous Programming with Async and Await (C# and Visual Basic)