【发布时间】:2012-11-29 07:59:02
【问题描述】:
我有一个队列,它接收数据超时。 我使用多线程出列并保存到数据库。 我创建了一个线程数组来完成这项工作。
for (int i = 0; i < thr.Length; i++)
{
thr[i] = new Thread(new ThreadStart(SaveData));
thr[i].Start();
}
保存数据
注意:eQ 和 eiQ 是 2 个全局队列。我用 while 来保持线程活着。
public void SaveData()
{
var imgDAO = new imageDAO ();
string exception = "";
try
{
while (eQ.Count > 0 && eiQ.Count > 0)
{
var newRecord = eQ.Dequeue();
var newRecordImage = eiQ.Dequeue();
imageDAO.SaveEvent(newEvent, newEventImage);
var storepath = Properties.Settings.Default.StorePath;
save.WriteFile(storepath, newEvent, newEventImage);
}
}
catch (Exception e)
{
Global._logger.Info(e.Message + e.Source);
}
}
它确实创建了多线程,但是当我调试时,只有 1 个线程活着,其余的都死了。 我不知道为什么?有人知道吗?谢了
【问题讨论】:
-
可能是
SaveData运行速度比新线程启动快? -
你能展示你的线程函数吗?您使用的是 SQLServer 还是其他数据库?
-
除此之外,您似乎遇到了竞争条件...
-
我新建了一个线程数组[4],所有它们的开始都是空的,所以 thr[i] = new Thread(new ThreadStart(SaveData)); thr[i].Start();创建线程
-
我怀疑这不是正确的检查方法,您可以使用日志来知道哪个线程正在调用您的方法。您可以参考这个答案来调试多线程应用程序:stackoverflow.com/questions/4329528/…
标签: c# arrays multithreading queue