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: শুরু হচ্ছে
জন্য 0.0070048 সেকেন্ড রানিং: ASYNC
শুরু: সিঙ্ক
ASYNC: 5.0119008 সেকেন্ডের জন্য চালনা
ASYNC: সম্পন্ন
সিঙ্ক: 5.0020168 সেকেন্ডের জন্য চালনা
সিঙ্ক: সম্পন্ন
এছাড়াও, এটি লক্ষ্য করা আকর্ষণীয় যে Thread.Sleepএটি আরও বেশি নির্ভুল, এমএস যথার্থতা আসলেই কোনও সমস্যা নয়, তবে Task.Delay15-30 মিমি ন্যূনতম নিতে পারে। উভয় ফাংশনগুলিতে ওভারহেড তাদের যে পরিমাণ এমএস নির্ভুলতার সাথে তুলনা করা হয় তা ন্যূনতম হয় ( Stopwatchআপনার আরও কিছু সঠিকের প্রয়োজন হলে ক্লাস ব্যবহার করুন )। Thread.Sleepএখনও আপনার থ্রেডটি বেঁধে রাখুন, Task.Delayঅপেক্ষা করার সময় অন্য কাজ করতে এটি ছেড়ে দিন।