Mam dwie alternatywy przy użyciu timera lub korzystając spać, muszę wywołać metodę co 3 sekundy po tym metoda jest zakończona, pisałem podstawowy przykład wykazać, co mam na myśli:Co powinienem użyć uśpienia lub czasomierza
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();
}
Moje pytania to
1) Czy mogę napisać kod z zegarem bardziej eleganckim? Oznacza usunięcie wywołania metody callToMethodAfterInterval z fooUsingTimer, uczynienie z timera jednej lub dwóch linii i usunięcie zmiennych fikcyjnych z deklaracji fooUsingTimer?
2) Rozumiem, że sen nie jest zajęty oczekiwaniem (http://www.codeproject.com/KB/threads/ThreadingDotNet.aspx) Nie znalazłem więc uzasadnienia, aby użyć opcji licznika czasu, ponieważ sen jest prostszy, a co lepiej zastosować, wersję timera lub sypialną?
3) Wiem, że Timers.timer jest bezpieczny dla wątków, czy może mi pomóc w zachowaniu, które chcę zaimplementować?
Dzięki.
Chciałbym zauważyć, że nie sądzę, że jest to dokładnie to, co pierwotnie zamierzał zrobić oryginał - to było wykonywanie długiego zadania, a następnie ponowne uruchamianie go 3 sekundy po zakończeniu - twój będzie działał co sekundę? – Paddy
@Paddy, tak, zakładałem stosunkowo krótkie zadanie. PO powinien powiedzieć. –
Nie chcę foo opcja zostanie wezwany przed innych połączeń do foo ma gotowych .. – Delashmate