Sie können einen Timer verwenden, um alle X Sekunden, Minuten oder was immer Sie brauchen, etwas zu tun.
Sie können einen Timer wie folgt implementieren:
public class XMLFilesManager
{
Timer tm = null;
public XMLFilesManager()
{
this.tm.Elapsed += new ElapsedEventHandler(XMLFilesManagerTimer_Elapsed);
this.tm.AutoReset = true;
this.tm = new Timer(60000);
}
public void Start()
{
this.tm.Start();
}
public void Stop()
{
this.tm.Stop();
}
protected void XMLFilesManagerTimer_Elapsed(object sender, ElapsedEventArgs e)
{
this.tm.Stop();
try
{
Execute();
}
catch (Exception ex)
{
// LOG ERROR
}
finally
{
this.tm.Start();
}
}
private void Execute()
{
// PUT YOUR BUSINESS LOGIC HERE
}
}
Dann Sie eine Eigenschaft hinzufügen können, die Geschichte Ihrer Ausführung zu speichern, wie:
// History of your object executions : object's identifier, last execution time and nb times you have execute the function for this object
List<Tuple<int,DateTime,int>> objectExecutionHistory = null;
Und in der ausführen Funktion Schleife deine XML-Objekte und mache, was du zu tun hast.
Sie könnten eine Warteschlange aller Ereignisse in der richtigen Reihenfolge erstellen. Wählen Sie den ersten Artikel aus der Warteschlange, berechnen Sie, wie lange Sie warten müssen, warten Sie, verarbeiten Sie den Artikel, spülen Sie, wiederholen Sie. Oder jedes Objekt könnte 'NextTime' und' RemainingCount' beibehalten. Finden Sie die früheste 'NextTime', berechnen Sie die Wartezeit, .... Wenn mehrere Artikel gleichzeitig fällig sind, spielt es keine Rolle *. Wählen Sie einfach einen aus und wenn Sie nach dem nächsten fälligen Artikel suchen, wird dieser in der Zeit Null fällig. (* Es sei denn, die Verarbeitung eines Artikels ist zeitaufwändig. In diesem Fall können Sie sie an separate Threads übergeben, die parallel verarbeitet werden.) – HABO
Ich habe versucht mit Threads, sehr schlechte Idee. CPU at 99% – qpBlaze
Hatten Sie jeden Thread einen Timer oder Sleep (ohne CPU-Kosten), bis es Zeit war, etwas Arbeit zu tun, oder "spinwait" die Zeit in einer Schleife zu überprüfen und CPU so schnell wie möglich zu verbrauchen? – HABO