Ich habe zwei alternative Verwendung von Timer oder Schlaf mit, ich brauche alle 3 Sekunden nach dieser Methode ein Verfahren zu nennen ist abgeschlossen, ich schrieb einfaches Beispiel zu zeigen, was ich meine:Was soll ich schlafen oder Timer
public static void Main()
{
new Thread(new ThreadStart(fooUsingSleep)).Start();
callToMethodAfterInterval(new Action<object, ElapsedEventArgs>(fooUsingTimer), 3000);
}
public static void fooUsingSleep()
{
Console.WriteLine("Doing some consuming time work using sleep");
Thread.Sleep(3000);
fooUsingSleep();
}
public static void fooUsingTimer(object dummy, ElapsedEventArgs dummyElapsed)
{
Console.WriteLine("Doing some consuming time work usning timer");
callToMethodAfterInterval(new Action<object, ElapsedEventArgs>(fooUsingTimer), 3000);
}
public static void callToMethodAfterInterval(Action<object,ElapsedEventArgs> inMethod, int inInterval)
{
System.Timers.Timer myTimer = new System.Timers.Timer();
myTimer.Elapsed += new ElapsedEventHandler(inMethod);
myTimer.Interval = inInterval;
myTimer.AutoReset = false;
myTimer.Start();
}
Also meine Fragen sind
1) Kann ich den Code mit dem Timer eleganter geschrieben? Bedeutet das Entfernen des Aufrufs der Methode callToMethodAfterInterval von fooUsingTimer, das Erstellen des Timers mit ein oder zwei Zeilen und das Entfernen der Dummy-Variablen aus der Deklaration von fooUsingTimer?
2) Ich verstehe Schlaf ist nicht beschäftigt warten (http://www.codeproject.com/KB/threads/ThreadingDotNet.aspx) So habe ich keine Rechtfertigung finden, die Timer-Option hier zu verwenden, weil die Schlaf ist einfacher, was ist besser zu benutzen, die Timer-Version oder die Schlaf-Version?
3) Ich weiß, dass Timers.timer Thread-sicher ist, kann es mir in dem Verhalten helfen, das ich implementieren möchte?
Danke.
Ich würde bemerken, dass ich nicht denke, dass dies genau das ist, was das Original tun sollte - es war eine langwierige Aufgabe und es dann wieder 3 Sekunden nach der Fertigstellung auszuführen - wird es jede Sekunde laufen? – Paddy
@Paddy, richtig, ich nahm eine relativ kurze Aufgabe an. Das OP sollte erzählen. –
Ich möchte nicht, dass die Option foo aufgerufen wird, bevor die anderen Aufrufe von foo beendet sind. – Delashmate