这个问题分为两部分。我有一个控制台应用程序,它从多个服务器获取信息并将此信息保存到数据库。为了使这同时执行,我使用了线程。我正在尝试每分钟自动执行一次。
搜索stackoverflow我发现这可以工作:
var timer = new System.Threading.Timer((e) =>
{
var models = ServerHandler.GetServerModels();
foreach (var m in models)
{
ServerHandler.MakeThreads(m);
}
Console.WriteLine("Running...");
Console.WriteLine("Press 'X' to exit or close the window, i : " + i);
i++;
}, null, 0, TimeSpan.FromMinutes(1).Seconds);
但是,这并没有按预期工作,它只执行一次。如果我更改为例如:
TimeSpan.FromMinutes(0.5).Seconds
或者:
TimeSpan.FromSeconds(30).Seconds
然后它工作。我究竟做错了什么?
这个问题的第二部分:
当这实际上像我上面显示的那样起作用时,会发生其他事情。该进程连续运行,并在 474 个线程后崩溃并说系统内存不足。
我尝试为此使用线程睡眠,但是当我这样做时,它在运行一次后停止执行。
如果它可能有帮助,包括这个:
public static void MakeThreads(ServerModel model)
{
Thread thread = new Thread(() => SaveServerInfo(model));
thread.Start();
//Thread.Sleep(1);
//thread.Join();
}
我怎样才能使这项工作?