Thread.Sleep() मेथड वर्तमान थ्रेड को निर्दिष्ट समय के लिए निलंबित करता है। यह मिलीसेकंड्स या TimeSpan स्वीकार करता है।
उदाहरण: चाइल्ड थ्रेड में Sleep का उपयोग
using System;
using System.Threading;
namespace MyApplication {
class ThreadCreationProgram {
public static void CallToChildThread() {
Console.WriteLine("Child thread starts");
int sleepfor = 2000;
Console.WriteLine("Child Thread Paused for {0} seconds", sleepfor / 1000);
Thread.Sleep(sleepfor);
Console.WriteLine("Child thread resumes");
}
static void Main(string[] args) {
ThreadStart childref = new ThreadStart(CallToChildThread);
Console.WriteLine("In Main: Creating the Child thread");
Thread childThread = new Thread(childref);
childThread.Start();
Console.ReadKey();
}
}
}
आउटपुट
In Main: Creating the Child thread Child thread starts Child Thread Paused for 2 seconds Child thread resumes
Sleep के ओवरलोड्स
// मिलीसेकंड्स (int) Thread.Sleep(1000); // TimeSpan Thread.Sleep(TimeSpan.FromSeconds(1)); Thread.Sleep(TimeSpan.FromMinutes(1)); Thread.Sleep(TimeSpan.FromHours(1)); // विशेष मान Thread.Sleep(0); // थ्रेड यील्ड करता है Thread.Sleep(-1); // अनिश्चित काल के लिए ब्लॉक (Timeout.Infinite) Thread.Sleep(Timeout.Infinite); // समान
महत्वपूर्ण विचार
- सटीकता: Sleep सटीक नहीं है; OS शेड्यूलर के कारण वास्तविक स्लीप समय थोड़ा अधिक हो सकता है।
- UI थ्रेड: कभी भी UI थ्रेड पर Sleep न करें - यह एप्लिकेशन को फ्रीज कर देता है।
- अपवाद:
ThreadInterruptedExceptionफेंका जा सकता है यदि अन्य थ्रेडInterrupt()कॉल करता है।
आधुनिक विकल्प: Task.Delay
// असिंक्रोनस, नॉन-ब्लॉकिंग await Task.Delay(2000); // 2 सेकंड // कैंसिलेशन के साथ await Task.Delay(2000, cancellationToken);
कब उपयोग करें
- कंसोल एप्लिकेशन्स में सरल देरी
- बैकग्राउंड वर्कर थ्रेड्स में पोलिंग अंतराल
- टेस्टिंग/सिमुलेशन में कृत्रिम विलंब