Wait for a while without blocking main thread Wait for a while without blocking main thread multithreading multithreading

Wait for a while without blocking main thread


Thread.Sleep(500) will force the current thread to wait 500ms. It works, but it's not what you want if your entire application is running on one thread.

In that case, you'll want to use a Timer, like so:

using System.Timers;void Main(){    Timer t = new Timer();    t.Interval = 500; // In milliseconds    t.AutoReset = false; // Stops it from repeating    t.Elapsed += new ElapsedEventHandler(TimerElapsed);    t.Start();}void TimerElapsed(object sender, ElapsedEventArgs e){    Console.WriteLine("Hello, world!");}

You can set AutoReset to true (or not set it at all) if you want the timer to repeat itself.


You can use await Task.Delay(500); without blocking the thread like Sleep does, and with a lot less code than a Timer.


I don't really understand the question.

If you want to block before checking, use Thread.Sleep(500);

If you want to check asynchronously every x seconds, you can use a Timer to execute a handler every x milliseconds.

This will not block your current thread.