Ich führe eine Task
erneut, wenn es abgeschlossen ist. Unten ist die Funktion, die ich in der Application_Start
meiner Anwendung aufrufen.Wie führen Sie mehrere Aufgaben in C# aus und erhalten ein Ereignis nach Abschluss dieser Aufgaben?
private void Run()
{
Task t = new Task(() => new XyzServices().ProcessXyz());
t.Start();
t.ContinueWith((x) =>
{
Thread.Sleep(ConfigReader.CronReRunTimeInSeconds);
Run();
});
}
Ich möchte mehrere Aufgaben ausführen, Nummer, die von web.config App Settings gelesen werden.
ich so etwas wie dies versuchen,
private void Run()
{
List<Task> tasks = new List<Task>();
for (int i = 0; i < ConfigReader.ThreadCount - 1; i++)
{
tasks.Add(Task.Run(() => new XyzServices().ProcessXyz()));
}
Task.WhenAll(tasks);
Run();
}
Was ist der richtige Weg, dies zu tun?
, wenn Sie in den Aufbau Ihrer eigenen Taskrunner graben wollen nicht/diese Klasse erstreckt ich wahrscheinlich für die erste Aufgabe durch den Einsatz bis zum Ende warten würden 'tasks.First(). Wait();' und dann eine while-Schleife mit einem Thread.Sleep, um den Status der verbleibenden Aufgaben zu beobachten. –
Sie möchten ein Stück Code in vorgegebenen Zeitintervallen wiederholt ausführen? Klingt nach dem genauen Grund, warum 'Timer' wirklich existiert. Und natürlich, wenn Sie dabei bleiben wollen, binden Sie einfach Ihre Fortsetzung an das Ergebnis von "Task.WhenAll" und alles wird genauso wie zuvor funktionieren. – Luaan
Sie benötigen entweder 'aware Task.WhenAll (tasks);' oder 'Task.WaitAll (tasks);'. Der eine ist ein asynchroner Aufruf und sollte erwartet werden, der andere ist eine normale Funktion, die in einem synchronen Kontext aufgerufen werden kann. Natürlich können Sie auch für die hässliche 'Task.WhenAll (Aufgaben) .Wait();' – Dorus