LINQ (Language Integrated Query) এবং asynchronous programming দুটি অত্যন্ত গুরুত্বপূর্ণ টেকনোলজি যা C#-এ ব্যবহার করা হয়। LINQ ডেটা কোয়েরি করার জন্য ব্যবহৃত হয়, আর asynchronous programming দীর্ঘ-running অপারেশনগুলোকে ব্লক না করে, কোডের পারফরম্যান্স উন্নত করতে ব্যবহৃত হয়। async
এবং await
কীওয়ার্ডগুলি একত্রে ব্যবহার করলে, আপনি কোডকে ব্লক না করে ডেটা প্রসেস করতে পারবেন। LINQ এর মাধ্যমে অ্যাসিঙ্ক্রোনাস অপারেশনগুলো চালানো সম্ভব, যার ফলে ডেটা রিট্রাইভ বা প্রসেসিংয়ের সময় ইউজার ইন্টারফেস (UI) হ্যাং বা ফ্রিজ হয়ে যাবে না।
যখন আপনি LINQ ব্যবহার করেন, তখন আপনি একে সাধারণত sync (synchronous) উপায়ে ব্যবহার করেন, অর্থাৎ কুয়েরি এক্সিকিউট হওয়া পর্যন্ত পরবর্তী লজিক রান হয় না। তবে, অনেক সময় ডেটাবেস থেকে তথ্য লোড করা বা ফাইল সিস্টেমের সাথে ইন্টারঅ্যাক্ট করার মতো দীর্ঘ-running অপারেশন প্রয়োজন হয়, যেখানে async এবং await সহ LINQ ব্যবহার করা হয়।
C# 5.0 এর পর থেকে LINQ এর কিছু সংস্করণ async এবং await কীওয়ার্ডের সাথে কাজ করতে সক্ষম হয়েছে, বিশেষত Entity Framework (EF) এবং অন্যান্য ডেটাবেস ফ্রেমওয়ার্কের সাথে।
ধরা যাক, আপনি একটি ডেটাবেস বা ওয়েব সার্ভিস থেকে বড় ডেটাসেট নিয়ে কাজ করছেন। এই ধরনের পরিস্থিতিতে LINQ to Entities ব্যবহার করে asynchronous কুয়েরি পরিচালনা করা অনেক বেশি কার্যকরী হবে।
using System;
using System.Linq;
using System.Threading.Tasks;
using System.Data.Entity; // Entity Framework ব্যবহার করা হয়েছে
public class Employee
{
public int EmployeeId { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
public class ApplicationDbContext : DbContext
{
public DbSet<Employee> Employees { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
using (var context = new ApplicationDbContext())
{
// Asynchronous LINQ query
var employees = await context.Employees
.Where(e => e.Age > 30)
.ToListAsync();
foreach (var employee in employees)
{
Console.WriteLine($"Name: {employee.Name}, Age: {employee.Age}");
}
}
}
}
এখানে:
await
কিওয়ার্ড ব্যবহার করা হয়েছে, যাতে কুয়েরি ফলাফল পাওয়ার আগে পরবর্তী কোড এক্সিকিউট না হয়।ToListAsync()
একটি asynchronous মেথড, যা ডেটাবেস থেকে ডেটা ফেচ করার সময় বর্তমান থ্রেড ব্লক না করে ইউজার ইন্টারফেস সাড়া দেয়ার জন্য আরও পারফর্ম্যান্স বৃদ্ধি করে।C# এ LINQ-এর সাথে async মেথড ব্যবহার করার জন্য কিছু নির্দিষ্ট মেথড এবং এক্সটেনশন পদ্ধতি রয়েছে, যেমন:
ToListAsync()
FirstOrDefaultAsync()
SingleOrDefaultAsync()
CountAsync()
AnyAsync()
এই মেথডগুলো Entity Framework এর অংশ হিসেবে উপলব্ধ, তবে অন্যান্য লাইব্রেরি যেমন Dapper অথবা MongoDB-এর ক্ষেত্রেও সাপোর্ট রয়েছে।
using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
public class ApplicationDbContext : DbContext
{
public DbSet<Employee> Employees { get; set; }
}
public class Employee
{
public int EmployeeId { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
using (var context = new ApplicationDbContext())
{
// LINQ Async Methods - Counting employees with age greater than 30
var count = await context.Employees
.Where(e => e.Age > 30)
.CountAsync();
Console.WriteLine($"Number of employees over 30 years old: {count}");
}
}
}
এখানে CountAsync()
asynchronous অপারেশন ব্যবহার করা হয়েছে। এটি ডেটাবেস থেকে ডেটা গোনার সময় থ্রেডকে ব্লক না করে কার্যকরভাবে কাজ করে।
অনেক সময়, আপনি একাধিক শর্তের উপর ভিত্তি করে asynchronous LINQ কুয়েরি করতে চান। এতে Where বা Select মেথডের সাথে একাধিক শর্তও দেওয়া যেতে পারে।
using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
public class ApplicationDbContext : DbContext
{
public DbSet<Employee> Employees { get; set; }
}
public class Employee
{
public int EmployeeId { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Department { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
using (var context = new ApplicationDbContext())
{
// Multiple conditions in Async LINQ query
var employees = await context.Employees
.Where(e => e.Age > 30 && e.Department == "HR")
.ToListAsync();
foreach (var employee in employees)
{
Console.WriteLine($"Name: {employee.Name}, Age: {employee.Age}, Department: {employee.Department}");
}
}
}
}
এখানে:
Where(e => e.Age > 30 && e.Department == "HR")
এ দুটি শর্তের মাধ্যমে ফিল্টারিং করা হয়েছে।ToListAsync()
asynchronous মেথডের মাধ্যমে কুয়েরি রান করা হয়েছে।LINQ এবং asynchronous programming একত্রে ব্যবহার করলে আপনি দীর্ঘ-running ডেটা প্রসেসিং অপারেশনগুলিকে ব্লক না করে কার্যকরীভাবে পরিচালনা করতে পারেন। এটি আপনার অ্যাপ্লিকেশনকে আরও প্রতিক্রিয়া সক্ষম এবং স্কেলেবল করে তোলে। LINQ এর asynchronous মেথডগুলি যেমন ToListAsync()
, CountAsync()
, FirstOrDefaultAsync()
আপনাকে ডেটাবেস বা অন্য ডেটা সোর্সের সাথে যোগাযোগ করার সময় পারফরম্যান্স উন্নত করতে সহায়তা করে।
common.read_more