2009-12-17 60 views
0

好吧,我知道在线程池中执行System.Timer的对象,而不是在UI线程中执行。我也知道System.Timer是线程安全的。在多线程中使用System.Timer对象时如何处理线程池?

说我有一个System.Timer对象的集合。我可以让它们全部运行,并且(除非我错了),它们实际上将在线程池中执行。

说我改为创建一个线程集合,每个线程运行一个System.Timer对象来定期执行其操作。 这些“线程包含”定时器的执行是否仍会在系统的线程池中发生?或者他们的执行会发生在线程内部吗?

换句话说:我是否通过在多个线程中运行定时器来欺骗自己,因为它们的执行将发生在同一个线程池中,并因此以相同的优先级执行? 或者是否有定时器在单独的线程内执行(例外处理和其他线程风险尽管)的实际好处(速度或其他)?

第三个选项是拥有定时器的集合,并让它们的Elapsed事件启动进程的线程。 这个是首选吗?

此外,是否可以更改线程池的优先级?或者是在单独的线程中运行进程,然后配置线程的优先级。

谢谢!

+0

而不是我将使用单个ThreadPool执行我的任务的定时器集合。 – serhio 2009-12-17 10:41:08

回答

1

就我个人而言,我会选择第三种方法 - 在线程池中运行定时器的集合,并在Tick/Elapsed事件中单独启动线程 - 因为以这种方式管理线程操作要简单得多。

线程可以根据定时器的值启动,暂停或停止,定时器全部由公共线程池管理 - 因此它们都有机会增加。