我想每隔 x 秒启动一次我的一些功能。但我不想等待任何功能完成,然后再启动该功能。假设我将计时器设置为 5 秒并开始functionX()
,但 5 秒后functionX()
没有完成 => 我想functionX()
在新线程中重新开始。我还希望一组功能同时启动。
这就是为什么我认为我必须使用System.Threading.Timer
并且Parallel
让我们写一个简短的例子,我认为它应该是这样的:
class Program
{
private static System.Threading.Timer timer;
private static int interval = 2000;
static void Main(string[] args)
{
Console.WriteLine("go");
Run();
Console.WriteLine("end");
Console.ReadKey();
}
private static void Run()
{
timer = new System.Threading.Timer(TimerCallback, null, 0, interval);
}
private static void TimerCallback(Object o) {
Parallel.Invoke(() => FunctionA(), () => FunctionB(), () => FunctionC());
}
private static void FunctionA()
{
Console.WriteLine("A");
}
private static void FunctionB()
{
Console.WriteLine("B");
}
private static void FunctionC()
{
Console.WriteLine("C");
}
}
这可以吗?有什么建议么?即使这段代码有某种错误:我想问另一个关于我的输出的问题 - 如果我启动这段代码,我会得到类似这样的输出:
go
end
A
B
C
C
A
B
C
A
B
C
B
A
嗯。第一个输出go
很好,但为什么是第二个,end
为什么不A
,,?这正常吗,输出 A、B、C 在第一个输出随机之后以某种方式出现?B
C
下一个我不明白的问题:如果我删除该行 Console.ReadKey();
,我看不到任何输出。
static void Main(string[] args)
{
Console.WriteLine("go");
Run();
Console.WriteLine("end");
}
我的意思是控制台正在启动,但在几毫秒后它关闭并且不再打开。但它应该会出现,因为我一次又一次地调用 A,B,C,所以一个新的控制台应该一次又一次地出现。有任何想法吗?谢谢