কম্পিউটার

C# এ Task.WhenAll() এবং Task.WaitAll() এর মধ্যে পার্থক্য কি?


Task.WaitAll বর্তমান থ্রেডকে অবরুদ্ধ করে যতক্ষণ না অন্য সব কাজ সম্পাদন করা হয়। Task.WhenAll পদ্ধতিটি একটি টাস্ক তৈরি করতে ব্যবহার করা হয় যা সম্পূর্ণ হবে এবং শুধুমাত্র যদি অন্য সমস্ত কাজ সম্পন্ন হয়।

যদি আমরা Task.WhenAll ব্যবহার করি তাহলে আমরা একটি টাস্ক অবজেক্ট পাব যা সম্পূর্ণ নয়। যাইহোক, এটি ব্লক করবে না কিন্তু প্রোগ্রামটি চালানোর অনুমতি দেবে। বিপরীতে, theTask.WaitAll মেথড কল আসলে ব্লক করে এবং অন্য সব কাজ শেষ হওয়ার জন্য অপেক্ষা করে।

একটি উদাহরণ দিয়ে বোঝার জন্য, আসুন আমরা বলি যে আমাদের একটি টাস্ক রয়েছে যা UI থ্রেডের সাথে কিছু ক্রিয়াকলাপ সম্পাদন করে যেমন কিছু অ্যানিমেশন ইউজার ইন্টারফেসে দেখানো দরকার। এখন, যদি আমরা Task.WaitAll ব্যবহার করি, তাহলে ব্যবহারকারীর ইন্টারফেসটি ব্লক হয়ে যাবে এবং সমস্ত সম্পর্কিত কাজগুলি সম্পূর্ণ না হওয়া পর্যন্ত আপডেট করা হবে না এবং ব্লকটি প্রকাশ করা হবে না। যাইহোক, যদি আমরা টাস্ক ব্যবহার করি। যখন একই অ্যাপ্লিকেশনে, UI থ্রেডটি ব্লক করা হবে না এবং যথারীতি আপডেট করা হবে।

টাস্কের উদাহরণ।When All

উদাহরণ

using System;
using System.Threading.Tasks;
namespace DemoApplication{
   public class Program{
      static void Main(string[] args){
         Task task1 = new Task(() =>{
            for (int i = 0; i < 5; i++){
               Console.WriteLine("Task 1 - iteration {0}", i);
               Task.Delay(1000);
            }
            Console.WriteLine("Task 1 complete");
         });
         Task task2 = new Task(() =>{
            Console.WriteLine("Task 2 complete");
         });
         task1.Start();
         task2.Start();
         Console.WriteLine("Waiting for tasks to complete.");
         Task.WhenAll(task1, task2);
         Console.WriteLine("Tasks Completed.");
         Console.ReadLine();
      }
   }
}

আউটপুট

উপরের কোডের আউটপুট হল

Waiting for tasks to complete.
Tasks Completed.
Task 1 - iteration 0
Task 2 complete
Task 1 - iteration 1
Task 1 - iteration 2
Task 1 - iteration 3
Task 1 - iteration 4
Task 1 complete

উপরের উদাহরণে আমরা দেখতে পাচ্ছি যে টাস্ক ব্যবহার করার সময়। অন্যান্য কাজ শেষ হওয়ার আগে যখন সমস্ত টাস্ক সম্পূর্ণ হয়। এর মানে হল টাস্ক.যখন সব কিছু এক্সিকিউশন ব্লক করে না।

টাস্কের জন্য উদাহরণ। সমস্ত অপেক্ষা করুন

উদাহরণ

using System;
using System.Threading.Tasks;
namespace DemoApplication{
   public class Program{
      static void Main(string[] args){
         Task task1 = new Task(() =>{
            for (int i = 0; i < 5; i++){
               Console.WriteLine("Task 1 - iteration {0}", i);
               Task.Delay(1000);
            }
            Console.WriteLine("Task 1 complete");
         });
         Task task2 = new Task(() =>{
            Console.WriteLine("Task 2 complete");
         });
         task1.Start();
         task2.Start();
         Console.WriteLine("Waiting for tasks to complete.");
         Task.WaitAll(task1, task2);
         Console.WriteLine("Tasks Completed.");
         Console.ReadLine();
      }
   }
}

আউটপুট

উপরের কোডের আউটপুট হল

Waiting for tasks to complete.
Task 1 - iteration 0
Task 2 complete
Task 1 - iteration 1
Task 1 - iteration 2
Task 1 - iteration 3
Task 1 - iteration 4
Task 1 complete
Tasks Completed.

উপরের উদাহরণে আমরা দেখতে পাচ্ছি যে Task.WaitAll টাস্ক ব্যবহার করার সময় বাকি সব কাজ শেষ হলেই সম্পূর্ণ করা হয়। এর মানে হল টাস্ক.অ্যালব্লক করুন এক্সিকিউশন।


  1. DirectX 11 এবং DirectX 12-এর মধ্যে পার্থক্য কী?

  2. C# এ আক্ষরিক এবং ধ্রুবকের মধ্যে পার্থক্য কী?

  3. C# এ স্ট্রিং এবং স্ট্রিং এর মধ্যে পার্থক্য কি?

  4. C# এ একটি তালিকা এবং একটি অ্যারের মধ্যে পার্থক্য কী?