【发布时间】:2015-01-22 19:08:24
【问题描述】:
我有一个 C# 单线程应用程序,目前正在使用线程池使其成为多线程应用程序。我一直在决定哪种模型可以解决我的问题。
这是我目前的情况
While(1)
{
do_sometask();
wait(time);
}
这几乎永远重复。新场景有多个执行上述操作的线程。我可以通过根据我必须执行的任务生成线程数来轻松实现它,其中所有线程都执行某些任务并永远等待。
这里的问题是我可能不知道任务的数量,所以我不能盲目地产生 500 个线程。我考虑过使用线程池,但是因为几乎每个线程都永远循环并且永远不会被释放用于队列中的新任务,所以不确定要使用哪个其他模型。
我正在寻找一个想法或解决方案,我可以打破线程中的循环并释放它而不是等待,但在等待后回来并恢复相同的任务(当时间过去时,使用类似执行最后一个任务时的计时器/检查时间戳)。
有了这个,我可以使用有限数量的线程(例如在线程池中)并为在旧线程等待期间进入的任务提供服务(实际上)。
非常感谢任何帮助。
【问题讨论】:
-
不要使用带有 while 循环和睡眠的显式线程,而是使用 Timers,只需将计时器的下一个间隔设置为您应该睡觉的时间。取决于which timer you choose,一些使用线程来运行“elapsed”事件,而另一些则在 UI 线程上运行(您可能需要
System.Timers.Timer)。
标签: c# multithreading design-patterns