【发布时间】:2011-03-29 16:58:00
【问题描述】:
我的问题是我显然使用了太多任务(线程?)来调用查询 SQL Server 2008 数据库的方法。代码如下:
for(int i = 0; i < 100000 ; i++)
{
Task.Factory.StartNew(() => MethodThatQueriesDataBase()).ContinueWith(t=>OtherMethod(t));
}
过了一会儿,我得到一个 SQL 超时异常。我希望将实际线程数保持在低于 100000 的缓冲区中,例如“一次不超过 10 个”。我知道我可以使用 ThreadPool 管理我自己的线程,但我希望能够通过 ContinueWith 来使用 TPL 的美妙之处。
我查看了Task.Factory.Scheduler.MaximumConcurrencyLevel,但它没有设置器。
我该怎么做?
提前致谢!
更新 1
我刚刚测试了 LimitedConcurrencyLevelTaskScheduler 类(由 Skeet 指出)并且仍然在做同样的事情(SQL 超时)。
顺便说一句,这个数据库每天接收超过 800000 个事件,并且从未发生过崩溃或超时。这听起来有点奇怪。
【问题讨论】:
-
在 24 个时间段内的 800,000 个事件是同时少于 100,000 个。即使这只是超过 8 小时,它也只会出现每秒 28 个查询......
标签: c# sql multithreading task task-parallel-library