【发布时间】:2016-07-09 10:30:58
【问题描述】:
这个问题分为两部分。 我有一个控制台应用程序,它从多个服务器获取信息并将此信息保存到数据库。为了使这同时执行,我使用了线程。我试图让这个执行每分钟自动执行一次。
搜索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();
}
我怎样才能做到这一点?
【问题讨论】:
-
'TimeSpan.FromMinutes(1).Seconds' 返回 0。你想要返回 60 的 'TimeSpan.FromMinutes(1).TotalSeconds'。
-
我会使用
TimeSpan重载。 msdn.microsoft.com/en-us/library/ah1h85ch(v=vs.110).aspx -
TimeSpan.FromSeconds(60).Seconds怎么样?!
标签: c# multithreading system.timers.timer