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

本文关键字:文档 下载 模式 async await 使用 | 更新日期: 2023-09-27 17:54:44

我想尝试一下c# 5中引入的这些新关键字。我对如何以并发方式分发工作很感兴趣。我更自然地使用线程池来做这件事,但我对使用这种新的异步模式做同样的事情很感兴趣。

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

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

无论使用哪种线程技术,您都需要一个管理人员将工作负载分配给各个工人。管理员将创建1-N个工作进程。在工作进程中,它们将执行您选择的目标线程化方法。

我建议你创建一个接口,每个工人都需要遵守,并在接口中指定一个启动方法,该方法接受url,一个可能的错误条件,这是公共的,可以检查,停止进程的能力和一种方法,当工作完成时,假设没有错误,交出数据。最后一个状态,如枚举,用于显示当前是否工作,是否已停止或已错误停止。

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

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

这里有一些文档可以帮助你开始使用async await模式:

基于任务的Async Await模式(下载word) by Stephen Toub

使用Async和Await进行异步编程(c#和Visual Basic)