好的,我知道System.Timer的一个对象是在线程池中执行的,而不是在UI线程中执行的。我也知道System.Timer是线程安全的。
假设我有一个System.Timer对象的集合。我可以让它们全部运行(除非我弄错了)它们实际上会在线程池中执行。
假设我创建了一个线程集合,每个线程运行一个System.Timer对象以定期执行其操作。 这些“包含线程”的定时器的执行是否仍会发生在系统的线程池中?或者他们的执行是否会发生在线程本身内?
换句话说:我是通过在多个线程中运行定时器来欺骗自己,因为它们的执行将发生在同一个线程池中,从而以相同的优先级执行? 或者通过让计时器在单独的线程内执行(尽管存在异常处理和其他线程危险),是否有实际的好处(速度或其他方面)?
第三种选择是拥有一组计时器,并让他们的Elapsed事件启动该进程的线程。 这个会成为首选吗?
另外,可以更改线程池的优先级吗?或者,最好是在单独的线程中运行该进程,然后配置那个线程的优先级。
谢谢!
答案 0 :(得分:1)
就个人而言,我会选择第三个选项 - 拥有一个在线程池中运行的计时器集合,并在Tick / Elapsed事件中添加单个线程 - 因为以这种方式管理线程操作要简单得多。 / p>
可以根据计时器的值启动,暂停或停止线程,并且您的计时器全部由公共线程池管理 - 因此它们都有机会增加。