我的上篇文章的问题,经过这两天的努力终于有了结果
我采用.net ThreadPool 确实不能解决我的问题.
public void ProcessQueue()
{
while (CCHelper.GetQueueCount() > 0)
{
for (int i = 0; i < iMaxThreads; i++)
{
WaitCallback a = new WaitCallback(ProcessOneQueue);
ThreadPool.QueueUserWorkItem(a, null);
Thread.Sleep(5000);
}
}
}
public void ProcessOneQueue()
{
//处理队列,提交网关.
}
Thread.Sleep(5000) 是不能解决我的问题的,这个太不保险了,线程池主要是不能灵活控制,我设断点调式发现只要访问数据库的地方,就不能继续跟踪断点了.
于是我找了资料,发现很多人都是说SqlConnection多线程是需要单独创建的.
详细看了我的代码后,发现SqlConnection是单独创建的.
后面决定手工创建线程,来解决问题:
Thread[] threads = new Thread[iMaxThreads];
for (int i = 0; i < iMaxThreads; i++)
{
threads[i] = new Thread(new ThreadStart(ProcessOneQueue));
threads[i].Start();
}
private object obj = new object();
public void ProcessOneQueue()
{
lock(obj)
{
//处理队列,提交网关
}
}
ok,问题解决.
同事介绍说,可以用VS2010&.Net 4.0 之并行运算(Parallel)(For、Foreach)来解决
这篇是后面找到的,大家可以看看
时间的关系,个人感觉还没有完全深入,后续再跟.