Diese Frage besteht aus zwei Teilen. Ich habe eine Konsolenanwendung, die Informationen von mehreren Servern erhält und diese Informationen in einer Datenbank speichert. Um zu erreichen, dass dies simultan ausgeführt wird, habe ich Threads verwendet. Ich versuche diese Ausführung jede Minute automatisch auszuführen.Wie man Threads jede Minute richtig ausführt?
Suche Stackoverflow ich, dass dies funktioniert könnte:
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);
Dies ist jedoch nicht wie erwartet funktioniert, führt er nur einmal. Wenn ich zum Beispiel ändern diese:
TimeSpan.FromMinutes(0.5).Seconds
Oder:
TimeSpan.FromSeconds(30).Seconds
Dann funktioniert es. Was mache ich falsch?
zweiten Teil dieser Frage:
Wenn dies tatsächlich funktioniert, wie ich oben etwas anderes zeigte passiert. Der Prozess läuft kontinuierlich und nach 474 Threads stürzt er ab und sagt, dass das System nicht genügend Arbeitsspeicher hat.
Ich versuchte mit Thread-Schlaf für diese, aber wenn ich das tue, hört es auf auszuführen, nachdem es einmal runed hat.
dies Einschließlich wenn es helfen könnten:
public static void MakeThreads(ServerModel model)
{
Thread thread = new Thread(() => SaveServerInfo(model));
thread.Start();
//Thread.Sleep(1);
//thread.Join();
}
Wie kann ich diese Arbeit machen?
'TimeSpan.FromMinutes (1) .Seconds' 0 zurück Sie wollen 'TimeSpan.FromMinutes (1) .TotalSeconds', die 60. –
I zurück würde die Überladung "TimeSpan" verwenden. _https: //msdn.microsoft.com/en-us/library/ah1h85ch (v = vs.110) .aspx_ –
Wie wäre es mit 'TimeSpan.FromSeconds (60) .Seconds'?! –