加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何阻止BackgroundWorker排队?

发布时间:2020-12-16 01:55:42 所属栏目:百科 来源:网络整理
导读:我有以下代码: for (int i = 1; i = 500; i++){ BackgroundWorker t = new BackgroundWorker(); t.DoWork += SOME DB METHOD THAT TAKES 5 SECONDS t.RunWorkerAsync();} 当我在SQL中对此进行分析时,我注意到BackgroundWorker似乎是以这样一种方式对线程进
我有以下代码:

for (int i = 1; i <= 500; i++)
{
    BackgroundWorker t = new BackgroundWorker();

    t.DoWork += SOME DB METHOD THAT TAKES 5 SECONDS
    t.RunWorkerAsync();
}

当我在SQL中对此进行分析时,我注意到BackgroundWorker似乎是以这样一种方式对线程进行排队,即只有4个或5个活动连接同时打开,而所有500个连接一次打开.我的数据库没有超时或阻止.如何防止此排队并同时使用所有500个并发线程命中数据库?

解决方法

BackgroundWorker使用ThreadPool.您可以使用ThreadPool.SetMinThreads和ThreadPool.SetMaxThreads调整ThreadPool.如果实际上可以确定与数据库服务器的许多连接可能是另一个问题(并导致其他问题).

但是,不建议启动500个BackgroundWorker实例!使用Task类的“任务并行库”可以提供更好的解决方案.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读