बीच सबसे बड़ा अंतर Task.Delayऔर Thread.Sleepहै कि है Task.Delayएसिंक्रोनस रूप से चलाने के लिए करना है। यह Task.Delayतुल्यकालिक कोड में उपयोग करने के लिए समझ में नहीं आता है । यह Thread.Sleepएसिंक्रोनस कोड में उपयोग करने के लिए एक बहुत बुरा विचार है ।
आम तौर पर आप कीवर्ड के Task.Delay() साथ कॉल करेंगे await:
await Task.Delay(5000);
या, यदि आप देरी से पहले कुछ कोड चलाना चाहते हैं:
var sw = new Stopwatch();
sw.Start();
Task delay = Task.Delay(5000);
Console.WriteLine("async: Running for {0} seconds", sw.Elapsed.TotalSeconds);
await delay;
लगता है कि यह क्या प्रिंट होगा? 0.0070048 सेकंड के लिए चल रहा है। यदि हम await delayइसके Console.WriteLineबजाय ऊपर जाते हैं, तो यह 5.0020168 सेकंड के लिए रनिंग प्रिंट करेगा।
आइए इसके अंतर को देखें Thread.Sleep:
class Program
{
static void Main(string[] args)
{
Task delay = asyncTask();
syncCode();
delay.Wait();
Console.ReadLine();
}
static async Task asyncTask()
{
var sw = new Stopwatch();
sw.Start();
Console.WriteLine("async: Starting");
Task delay = Task.Delay(5000);
Console.WriteLine("async: Running for {0} seconds", sw.Elapsed.TotalSeconds);
await delay;
Console.WriteLine("async: Running for {0} seconds", sw.Elapsed.TotalSeconds);
Console.WriteLine("async: Done");
}
static void syncCode()
{
var sw = new Stopwatch();
sw.Start();
Console.WriteLine("sync: Starting");
Thread.Sleep(5000);
Console.WriteLine("sync: Running for {0} seconds", sw.Elapsed.TotalSeconds);
Console.WriteLine("sync: Done");
}
}
भविष्यवाणी करने की कोशिश करें कि यह क्या छपेगा ...
async: Async शुरू
: 0.0070048 सेकंड के लिए चल रहा है
सिंक:
Async शुरू : 5.0119008 सेकंड के लिए चल रहा है
async: पूर्ण
सिंक: 5.0020168 सेकंड के लिए चल रहा है
सिंक: पूर्ण
इसके अलावा, यह ध्यान रखना दिलचस्प है कि Thread.Sleepकहीं अधिक सटीक है, एमएस सटीकता वास्तव में एक समस्या नहीं है, जबकि Task.Delayन्यूनतम 15-30ms ले सकती है। दोनों कार्यों पर ओवरहेड एमएस सटीकता की तुलना में उनके पास न्यूनतम है ( Stopwatchयदि आपको कुछ अधिक सटीक आवश्यकता है तो कक्षा का उपयोग करें )। Thread.Sleepअभी भी अपने थ्रेड को टाई अप करें, Task.Delayजब आप प्रतीक्षा करते हैं तो अन्य काम करने के लिए इसे जारी करें।