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