C# 使用异步/等待模式下载多个文档

C# 使用异步/等待模式下载多个文档,c#,concurrency,async-await,C#,Concurrency,Async Await,我想体验一下C#5中引入的这些新关键字。我对如何以并行方式分配工作感兴趣。我会更自然地使用线程池,但对使用这种新的异步模式也感兴趣 这里是我的玩具示例,我正在编写一个爬虫程序,它将从n个根站点进行爬网,并进一步跟踪链接。编写此应用程序是否有良好的并发模式。无论使用何种线程技术,您都需要一位经理将工作负载分配给各个工作人员。经理将创建1-N个工作进程。在工作进程中,他们将执行您选择的目标线程化方法 我建议您创建一个每个工作人员都需要遵守的接口,并在该接口中指定一个采用url的启动方法、一个公开且可

我想体验一下C#5中引入的这些新关键字。我对如何以并行方式分配工作感兴趣。我会更自然地使用线程池,但对使用这种新的异步模式也感兴趣


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

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

我建议您创建一个每个工作人员都需要遵守的接口,并在该接口中指定一个采用url的启动方法、一个公开且可检查的可能错误条件、停止进程的能力以及在工作完成时传递数据的方法(假设没有错误)。最后是一种状态,例如枚举,它是当前正在工作还是已停止或已停止并出现错误

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

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

以下是一些帮助您开始使用异步等待模式的文档:

(下载word)斯蒂芬·图布


互联网上有很多文章都是关于这个例子的,你看过吗?你能找出一篇吗。我还没有在这上面找到。需要注意的一点是,它不是关于线程池或异步/等待,而是关于同时使用两者time@Dave:线程池在这里有什么好处?你想怎么用它?当您使用
async
下载文件时,您不需要线程池。@svick:Sound interest现在将其读作Stephen Taub one(见下文)。我同意这样一个事实,即启动异步方法不需要线程池。我真正不明白的是你如何安排你的下载(在同一个域名上不超过2次活动下载,比如总共10次并发下载)。