我的問題是,我顯然使用太多的任務(線程?),調用查詢SQL Server 2008數據庫的方法。這裏是代碼:太多的任務導致SQL數據庫超時
for(int i = 0; i < 100000 ; i++)
{
Task.Factory.StartNew(() => MethodThatQueriesDataBase()).ContinueWith(t=>OtherMethod(t));
}
過了一段時間,我得到一個SQL超時異常。我希望保持線程的實際數量低於(100000)到一個「一次不超過10個」的緩衝區。我知道我可以使用ThreadPool來管理我自己的線程,但是我希望能夠使用TPL的美麗與ContinueWith。
我看着Task.Factory.Scheduler.MaximumConcurrencyLevel
,但它沒有設置。
我該怎麼做?
提前致謝!
更新1
我只是測試了LimitedConcurrencyLevelTaskScheduler
類(由雙向飛碟指出),仍然做同樣的事情(SQL超時)。
順便說一句,這個數據庫每天接收超過800000個事件,並且從來沒有發生過崩潰或超時事件。這聽起來有點奇怪。
在24個時間段內的800,000個事件是同時少於100,000個的LOT。即使這只是8小時以上,它只會出現28秒的查詢...... – NotMe 2011-03-29 17:24:47