C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML
Example. Sleep is found on the Thread class. It is a static method that receives one parameter. You must either include System.Threading or use the fully qualified name for the method invocation, which is System.Threading.Thread.Sleep.
Tip: You do not need to create a new Thread to use the Sleep method as it is static.
Next: This example shows the runtime behavior of the Thread.Sleep method in the .NET Framework.
C# program that sleeps using System; using System.Diagnostics; using System.Threading; class Program { static void Main() { // // Demonstrates three different ways of calling Sleep. // var stopwatch = Stopwatch.StartNew(); Thread.Sleep(0); stopwatch.Stop(); Console.WriteLine(stopwatch.ElapsedMilliseconds); Console.WriteLine(DateTime.Now.ToLongTimeString()); stopwatch = Stopwatch.StartNew(); Thread.Sleep(5000); stopwatch.Stop(); Console.WriteLine(stopwatch.ElapsedMilliseconds); Console.WriteLine(DateTime.Now.ToLongTimeString()); stopwatch = Stopwatch.StartNew(); System.Threading.Thread.Sleep(1000); stopwatch.Stop(); Console.WriteLine(stopwatch.ElapsedMilliseconds); // // Bonus: shows SpinWait method. // stopwatch = Stopwatch.StartNew(); Thread.SpinWait(100000 * 10000); stopwatch.Stop(); Console.WriteLine(stopwatch.ElapsedMilliseconds); } } Output 0 ElapsedMilliseconds after Sleep(0) 8:14:43 AM Time after Sleep(0) 4999 ElapsedMilliseconds after Sleep(5000) 8:14:48 AM Time after Sleep(5000) 999 ElapsedMilliseconds after Sleep(1000) 3144 ElapsedMilliseconds after SpinWait(Int32)
The program defines the Main entry point in the Program class, which contains three method invocations to the Thread.Sleep method with varying calling syntaxes and parameters. The results of the Console.WriteLine calls are shown.
Note: The surrounding code around the Sleep invocations takes the system's time and uses Stopwatch to time the Thread.Sleep calls.
Implementation. Next we review the implementation of the Thread.Sleep method and the Thread.SpinLock method in the .NET Framework. These two methods call into the SleepInternal and SpinWaitInternal functions in mscorlib.
Tip: Thread.Sleep likely will end up calling the same code in the Windows kernel that the Sleep call in any language uses.
SpinWait. When you execute the above program, you will notice that the program does not require significant CPU time when executing the Thread.Sleep calls. It only starts consuming the entire CPU core when the Thread.SpinWait method is invoked.
So: Sleep uses the operating system to "pause" the program, resulting in 0% CPU, while Thread.SpinWait executes useless instructions.
Summary. Thread.Sleep is fairly accurate in pausing the program for the specified number of milliseconds. It does not cause your program to consume 100% CPU. This will save power and provide more resources for other programs.
Finally: We noted the implementation in the .NET Framework and also talked about idle loops and SpinWait.