async এবং await কীওয়ার্ড

Microsoft Technologies - সি শার্প (C#) - থ্রেডিং এবং কনকারেন্সি | NCTB BOOK

সি# এ async এবং await কীওয়ার্ডগুলি ব্যবহার করে অ্যাসিনক্রোনাস প্রোগ্রামিং সহজে করা যায়। অ্যাসিনক্রোনাস প্রোগ্রামিংয়ের মাধ্যমে প্রোগ্রামকে নির্দিষ্ট কিছু কাজ সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করতে হয় না, বরং সে সময়ে অন্য কাজগুলোও সম্পন্ন করতে পারে।

async এবং await কীওয়ার্ড

  • async: মেথডের সাথে যুক্ত করে জানানো হয় যে এই মেথডটি অ্যাসিনক্রোনাস, অর্থাৎ এটি একটি দীর্ঘমেয়াদি কাজ করার সময় মেইন থ্রেডকে ব্লক করবে না।
  • await: দীর্ঘমেয়াদি কাজ শেষ না হওয়া পর্যন্ত অপেক্ষা করতে ব্যবহৃত হয়। এটি async মেথডের ভিতরে কাজ করে এবং কেবল async মেথডেই ব্যবহার করা যায়।

উদাহরণ দিয়ে async এবং await ব্যাখ্যা

নিচে async এবং await কীভাবে কাজ করে তার একটি উদাহরণ দেওয়া হলো। এখানে একটি অ্যাসিনক্রোনাস মেথড ব্যবহার করে একটি কাজ সম্পন্ন করা হয়েছে।

উদাহরণ ১: বেসিক async এবং await ব্যবহারের উদাহরণ

using System;
using System.Threading.Tasks;

public class Program
{
    public static async Task Main()
    {
        Console.WriteLine("Starting work...");
        
        // অ্যাসিনক্রোনাস মেথড কল করা
        await DoWorkAsync();
        
        Console.WriteLine("Work completed.");
    }

    public static async Task DoWorkAsync()
    {
        Console.WriteLine("Working...");
        await Task.Delay(3000); // ৩ সেকেন্ড অপেক্ষা করে
        Console.WriteLine("Work is done!");
    }
}

ব্যাখ্যা

  1. async Task Main(): Main মেথডে async ব্যবহার করে জানানো হয়েছে যে এটি অ্যাসিনক্রোনাস মেথড।
  2. await DoWorkAsync(): DoWorkAsync মেথডটি কল করা হয়েছে এবং await ব্যবহার করে বলা হয়েছে যে এটি সম্পন্ন হওয়া পর্যন্ত অপেক্ষা করবে।
  3. Task.Delay(3000): Task.Delay একটি ৩ সেকেন্ডের ডিলে তৈরি করে, যা অ্যাসিনক্রোনাস টাইমার হিসেবে কাজ করে।

আউটপুট:

Starting work...
Working...
Work is done!
Work completed.

এই প্রক্রিয়ায় Task.Delay কাজের সময় মেইন থ্রেডকে ব্লক না করে অপেক্ষা করে। ফলে অন্যান্য কাজ সমান্তরালে চলতে পারে।


উদাহরণ ২: async এবং await সহ ডেটা ফেচ করা

ধরা যাক, একটি মেথড সার্ভার থেকে ডেটা ফেচ করবে। এই কাজ সম্পন্ন করতে কিছুটা সময় লাগতে পারে, তাই async এবং await ব্যবহার করলে মেইন থ্রেড ব্লক না হয়ে অপেক্ষা করবে এবং ডেটা ফেচ হওয়ার পরই কেবল পরবর্তী কাজ সম্পন্ন করবে।

using System;
using System.Net.Http;
using System.Threading.Tasks;

public class Program
{
    public static async Task Main()
    {
        Console.WriteLine("Fetching data...");

        // অ্যাসিনক্রোনাস মেথড কল করে ডেটা ফেচ করা
        string data = await FetchDataAsync();
        
        Console.WriteLine("Data fetched: " + data);
    }

    public static async Task<string> FetchDataAsync()
    {
        using (HttpClient client = new HttpClient())
        {
            // কোনো URL থেকে ডেটা ফেচ করা
            string result = await client.GetStringAsync("https://jsonplaceholder.typicode.com/todos/1");
            return result;
        }
    }
}

ব্যাখ্যা

  1. async Task<string> FetchDataAsync(): FetchDataAsync একটি অ্যাসিনক্রোনাস মেথড যা একটি স্ট্রিং রিটার্ন করে।
  2. await client.GetStringAsync(...): এই মেথডটি অনলাইনে একটি GET রিকোয়েস্ট পাঠায় এবং রেসপন্স না আসা পর্যন্ত অপেক্ষা করে।
  3. await FetchDataAsync(): FetchDataAsync থেকে ডেটা রিটার্ন না হওয়া পর্যন্ত অপেক্ষা করে।

আউটপুট:

Fetching data...
Data fetched: {id: 1, title: "...", ...}

এই উদাহরণে await ব্যবহার করে সার্ভার থেকে ডেটা ফেচ করা হচ্ছে। অ্যাসিনক্রোনাস প্রোগ্রামিং এর মাধ্যমে await নিশ্চিত করে যে ডেটা সম্পূর্ণভাবে লোড হওয়া পর্যন্ত মেইন থ্রেড অপেক্ষা করবে, তবে ব্লক হবে না।


async এবং await ব্যবহারের নিয়ম ও সুবিধা

async মেথডের রিটার্ন টাইপ:

  • void: ইভেন্ট হ্যান্ডলার মেথডে ব্যবহৃত হয়।
  • Task: যখন মেথড কিছু রিটার্ন করবে না।
  • Task<T>: যখন মেথড কিছু রিটার্ন করবে, যেমন Task<string>, যেখানে string রিটার্ন হবে।

await কেবল async মেথডের মধ্যে ব্যবহার করা যায়: await ব্যবহারের জন্য মেথডে async কিওয়ার্ড ব্যবহার করা প্রয়োজন।

পারফরম্যান্স বৃদ্ধি: অ্যাসিনক্রোনাস প্রোগ্রামিং ব্যবহার করে প্রোগ্রামের পারফরম্যান্স উন্নত করা যায়। এতে UI ব্লক না করে সমান্তরালে কাজ করতে পারে।

সহজ ও সংক্ষিপ্ত কোড: async এবং await এর মাধ্যমে জটিল অ্যাসিনক্রোনাস প্রোগ্রামিং সহজে করা যায় এবং কোডও সংক্ষিপ্ত হয়।


সংক্ষেপে

  • async: মেথডকে অ্যাসিনক্রোনাস ঘোষণা করে এবং অ্যাসিনক্রোনাস কাজ পরিচালনার জন্য প্রস্তুত করে।
  • await: অ্যাসিনক্রোনাস কাজ সম্পূর্ণ না হওয়া পর্যন্ত অপেক্ষা করে এবং কাজ শেষ হলে পরবর্তী লাইন এক্সিকিউট করে।
  • পারফরম্যান্স ও রেসপন্সিভনেস বৃদ্ধি: অ্যাসিনক্রোনাস প্রোগ্রামিং ব্যবহার করে অ্যাপ্লিকেশনকে ব্লক না করে চলমান রাখা যায়।

async এবং await এর ব্যবহার করে সি# এ অ্যাসিনক্রোনাস প্রোগ্রামিং সহজে করা যায়, যা প্রোগ্রামের কার্যক্ষমতা এবং রেসপন্সিভনেস বৃদ্ধি করে।

Content added By
Promotion