大型线程任务处理程序的C#核心实现

时间:2014-08-07 14:54:16

标签: c# multithreading

我在C#中编写了一个Web scraper。我使用Thread对象来实现它,这些对象从一组任务中获取工作,并针对回调处理所有这些元素并存储结果。任务池意味着5K - 50K输入网址。

是否有任何核心框架对象可以处理这样的事情?我试图查看Threadpool是否可以实例化,但它不能。我也非常不确定这些高数量的任务是否可以/应该排队到默认Threadpool

  

那么,核心中是否有任何可用于创建大量任务和许多线程并让这些线程处理这些任务的东西?或者我应该坚持自己。自从我使用C#以来,我已经彻底改造了几个轮子。

1 个答案:

答案 0 :(得分:3)

是的,有。

http://msdn.microsoft.com/en-us/library/dd460717%28v=vs.110%29.aspx

任务并行库(TPL)

  

任务并行库(TPL)是System.Threading和System.Threading.Tasks命名空间中的一组公共类型和API。 TPL的目的是通过简化向应用程序添加并行性和并发性的过程来提高开发人员的工作效率。 TPL动态地扩展并发度,以最有效地使用所有可用的处理器。此外,TPL处理工作的分区,ThreadPool上的线程调度,取消支持,状态管理和其他低级细节。通过使用TPL,您可以最大限度地提高代码的性能,同时专注于您的程序旨在完成的工作。

默认情况下,使用TaskScheduler将任务排队到线程池。调度程序可以促进有效使用可用的线程和处理器。

您可能也对位于其上的Dataflow API感兴趣。

http://msdn.microsoft.com/en-us/library/hh228603%28v=vs.110%29.aspx

数据流

  

此数据流模型通过为粗粒度数据流和流水线操作任务提供进程内消息传递来促进基于actor的编程。数据流组件构建在TPL的类型和调度基础结构之上,并与用于异步编程的C#,Visual Basic和F#语言集成。当您有多个必须以异步方式相互通信的操作或希望在数据可用时处理数据时,这些数据流组件非常有用。