gpt4 book ai didi

c# - Threadpool is getting used by windows service 问题

转载 作者:可可西里 更新时间:2023-11-01 10:55:28 24 4
gpt4 key购买 nike

我创建了一个 Windows 服务,它目前有三个计时器。第一个计时器每 15 秒唤醒一次,第二个计时器每分钟唤醒一次。第三个计时器每天都在醒来。

问题是这些每次都产生新线程,一旦线程池完全用完。有没有办法只产生 3 个线程而不产生更多新线程。

我的代码看起来像这样:

protected Onstart()
{
var timer1 = new TImer();
timer.Elapsed += Event1;
timer1.interval = 60000;
timer1.start();

var timer2 = new TImer();
timer2.Elapsed += Event2;
timer2.interval = 60000;
timer2.start();
}

private Event1(object,elapsedeventargs)
{
var workerthread1 = **new thread**(workerthreadfunc1)
workerthread1.start();
}

private Event2(object,elapsedeventargs)
{
var workerthread2 = **new thread**(workerthreadfunc2)
workerthread2.start();
}

如您所见,它正在创建新线程,这将在某个时候用完线程池中的所有线程并突然停止 Windows 服务。目前它正在停止并记录事件 ID 为 5000 的事件日志。

最佳答案

您的问题不在于线程池。每次您的计时器之一“滴答”时,您都在创建自己的线程。我不知道 workerthreadfunc1 和 workerthreadfunc2 在做什么,但如果它们不返回,你将继续创建越来越多的线程。

如果您使用的是 System.Timers.Timer,则 Elapsed 事件已经在 ThreadPool 线程上。为什么不在那里执行您想要的操作?

关于c# - Threadpool is getting used by windows service 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1756948/

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