बीच सबसे बड़ा अंतर 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
जब आप प्रतीक्षा करते हैं तो अन्य काम करने के लिए इसे जारी करें।