我有一个Windows服务,它在长时间处理后发送电子邮件。该服务不断从数据库表中获取电子邮件数据,每当有表格条目并处理完毕后将其发送出去。
目前,这是一个多线程应用程序,在生产服务器上配置了线程数高达25个(仅用于此目的),因为它需要24x7x365运行。但我们只看到有2个活动线程正在运行。可能的原因是什么?
另外,我希望在这里使用线程池或TPL来更改线程代码。请您建议更好的处理此情况的方法?
提前致谢!
//以下是示例代码
目前,这是一个多线程应用程序,在生产服务器上配置了线程数高达25个(仅用于此目的),因为它需要24x7x365运行。但我们只看到有2个活动线程正在运行。可能的原因是什么?
另外,我希望在这里使用线程池或TPL来更改线程代码。请您建议更好的处理此情况的方法?
提前致谢!
//以下是示例代码
Thread[] threads;
int ThreadCount = 25;
private void StartProcess()
{
//Create new threads
if (Threads == null)
{
// Create array of threads based on the configuration
threads = new Thread[ThreadCount];
for (int i = 0; i < ThreadCount; i++)
{
Thread[] threads[i] = new Thread(new ThreadStart(SendEmail));
threads[i].Start();
}
}
else
{
resume it if exists
for (int j = 0; j < threads.Length; j++)
{
if (threads[j].ThreadState == Threading.ThreadState.Suspended)
{
threads[j].Resume();
}
}
}
}
public void SendEmail()
{
while (Thread.CurrentThread.ThreadState == System.Threading.ThreadState.Running)
{
// send email code
Thread.Sleep(duration);
}
}
SmtpClient.SendMailAsync
和异步数据库端点。 - Yuval Itzchakov