所有线程完成后线程计数器读数大于零
Thread counter reading greater than zero after all threads have completed
我的程序中有一个线程计数器,当我的所有线程都完成时它应该为 0。我首先在我的工作线程和线程的开头使用 threads++ - 最后,但在所有线程完成后我的计数器读数为 145。所以我将它们并排放置,如下所示,它仍然没有读取 0,现在在所有线程完成后读取 8。这怎么可能?我正在将大约 13000 封邮件的数据保存到 sql 服务器数据库。每条消息调用 ProcessMailMessage 一次。
int threads = 0;
public bool ProcessMailMessage(byte[] mymsg, string username, string folder)
{
BackgroundWorker bg = new BackgroundWorker();
bg.DoWork += (sss, res) => {
threads++;
threads--;
// save some data to database
};
bg.RunWorkerAsync();
return true;
}
我通过在调用 RunWorkerAsync() 之前递增计数器并在 RunWorkerComplete 事件中递减来解决这个问题
bg.RunWorkerCompleted += (s, res) =>
{
threads--;
};
threads++;
bg.RunWorkerAsync();
我的程序中有一个线程计数器,当我的所有线程都完成时它应该为 0。我首先在我的工作线程和线程的开头使用 threads++ - 最后,但在所有线程完成后我的计数器读数为 145。所以我将它们并排放置,如下所示,它仍然没有读取 0,现在在所有线程完成后读取 8。这怎么可能?我正在将大约 13000 封邮件的数据保存到 sql 服务器数据库。每条消息调用 ProcessMailMessage 一次。
int threads = 0;
public bool ProcessMailMessage(byte[] mymsg, string username, string folder)
{
BackgroundWorker bg = new BackgroundWorker();
bg.DoWork += (sss, res) => {
threads++;
threads--;
// save some data to database
};
bg.RunWorkerAsync();
return true;
}
我通过在调用 RunWorkerAsync() 之前递增计数器并在 RunWorkerComplete 事件中递减来解决这个问题
bg.RunWorkerCompleted += (s, res) =>
{
threads--;
};
threads++;
bg.RunWorkerAsync();