gpt4 book ai didi

.net - 用于长时间运行任务的线程池或 TPL

转载 作者:行者123 更新时间:2023-12-02 04:49:46 26 4
gpt4 key购买 nike

我有一个 Windows 服务,它在经过漫长的过程后发送电子邮件。每当有表条目并处理它并将其发送出去时,该服务就会继续从数据库表中获取电子邮件数据。

目前它是一个多线程应用程序,我们在生产服务器中将线程数配置为最多 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);
}
}

最佳答案

您看不到 25 个线程的原因可能是线程方法 SendEmail 可能会在线程更改状态时退出。一旦退出,线程就消失了,无法恢复。

我认为您可能希望在 while 循环中使用不同的条件。

关于.net - 用于长时间运行任务的线程池或 TPL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29901018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com