我们有一个网络应用程序,可监控多个社交媒体,如twitter / facebook。我们从这些社交媒体收到的数据正被保存到数据库中。数据很大,因此我考虑使用Task
来将数据保存到数据库中。
但我对它的运作方式有些担忧。在文档中找不到如果我为1个用户开始10个线程乘以2000个用户会发生什么?或者可能是10.000个用户。
Task
到底会做什么?它是否有这些Threads
的某种队列?
对此事的任何启示都会非常感激。谢谢!
答案 0 :(得分:4)
您应该使用异步编程模型(APM)来执行此操作。
通过使用APM,您可以避免创建数百个线程。
在幕后,APM可以使用I/O Completion Ports
在数据到达或发送时提供回调,这意味着不必浪费线程。
请参阅此处了解详情:
http://msdn.microsoft.com/en-us/library/vstudio/hh191443.aspx
http://msdn.microsoft.com/en-us/library/vstudio/hh300224.aspx
答案 1 :(得分:4)
Task
只是一个可以安排到TaskScheduler
队列的委托的包装器。 Task
不会创建任何线程。当您在内部调用task.Start()
时,它会调用taskScheduler.QueueTask(Task)
方法。
默认情况下,所有任务都使用内部使用TaskScheduler.Default
的{{1}}。
您可以在创建ThreadPool
时指定自定义任务计划程序 - 此类具有接受TaskFactory
参数的构造函数。当前的scheduller始终可以通过TaskScheduler
属性获得。
答案 2 :(得分:1)
Task
使用Thread
来完成工作。
Tasks
排队等候ThreadPool
。
回答你的问题;你需要尝试一下,看看应用程序是否应对。
您可能可以共享线程,因此它不会是10 * 2000个线程。