gpt4 book ai didi

c# - System.Timers.Timer 是否在独立线程中运行?

转载 作者:IT王子 更新时间:2023-10-29 04:47:51 31 4
gpt4 key购买 nike

我试图了解 System.Timers.Timer 引发 elapsed 事件的时间,它是在独立线程中引发的吗?

我下面的例子似乎表明三个计时器在它们自己的线程中独立运行:

class Program
{
static System.Timers.Timer timer = new System.Timers.Timer();
static System.Timers.Timer timer2 = new System.Timers.Timer();
static System.Timers.Timer timer3 = new System.Timers.Timer();

static void Main(string[] args)
{
timer.Elapsed += new System.Timers.ElapsedEventHandler(
timer_Elapsed);
timer2.Elapsed += new System.Timers.ElapsedEventHandler(
timer2_Elapsed);
timer3.Elapsed += new System.Timers.ElapsedEventHandler(
timer3_Elapsed);

timer.Interval = 1000;
timer2.Interval = 1000;
timer3.Interval = 1000;

timer.Start();
timer2.Start();
timer3.Start();

Console.WriteLine("Press \'q\' to quit the sample.");
while (Console.Read() != 'q') ;
}

static void timer3_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timer3.Stop();
Console.WriteLine("Timer 3 Hit...");
timer3.Start();
}

static void timer2_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timer2.Stop();
Console.WriteLine("Timer 2 Hit...");
Thread.Sleep(2000);
timer2.Start();
}

static void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timer.Stop();
Console.WriteLine("Timer 1 Hit...");
Thread.Sleep(10000);
timer.Start();
}
}

enter image description here

最佳答案

根据 MSDN,在 System.Timers.Timer 上,当 Elapsed 事件触发时,它会在系统线程池中的线程上调用:

If the SynchronizingObject property is Nothing, the Elapsed event is raised on a ThreadPool thread. If processing of the Elapsed event lasts longer than Interval, the event might be raised again on another ThreadPool thread. In this situation, the event handler should be reentrant.

由于 SynchronizingObject 的默认值是 null,因此所有经过的事件都将在线程池中处理。所以,这取决于线程池有多满,如果有空闲线程,那么每个经过的事件很可能在单独的线程上并发运行。但是,如果由于某种原因,系统线程池已完全使用,则经过的事件可能会按计划进行序列化。

要点是:“视情况而定”。也就是说,只要池中有空闲线程,它们就可以并行运行。

引用:MSDN on System.Timers.Timer

关于c# - System.Timers.Timer 是否在独立线程中运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7893773/

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