PLINQ (Parallel LINQ) হল LINQ এর একটি এক্সটেনশন যা মাল্টিথ্রেডিং বা পারালাল প্রসেসিং সমর্থন করে। এটি LINQ কুয়েরিগুলিকে সহজভাবে মাল্টি-কোর প্রসেসরের সুবিধা নিতে সক্ষম করে, যার ফলে বড় আকারের ডেটাসেটের জন্য কর্মক্ষমতা এবং পারফরম্যান্স উল্লেখযোগ্যভাবে উন্নত হয়। PLINQ ব্যবহার করে আপনি সহজেই আপনার ডেটা প্রসেসিংয়ের কাজকে বিভিন্ন থ্রেডে ভাগ করতে পারেন, যা ডেটাবেস বা ইন-মেমরি ডেটা নিয়ে কাজ করার সময় কার্যকর হতে পারে।
PLINQ হল .NET Framework এর একটি অংশ যা System.Linq নেমস্পেসে অন্তর্ভুক্ত। এটি Parallel.ForEach এবং Parallel LINQ Queries এর মাধ্যমে মাল্টি-কোর প্রসেসিংয়ের সুবিধা প্রদান করে। PLINQ আপনাকে বড় ডেটাসেটের সাথে কাজ করার সময় বিভিন্ন processor core এ কাজ ভাগ করে দেয়, যার ফলে ডেটা প্রসেসিং দ্রুত হয়।
PLINQ মূলত Parallel অপারেশনসমূহের মাধ্যমে LINQ কুয়েরির কার্যকারিতা বৃদ্ধি করতে সাহায্য করে। যখন আপনি PLINQ ব্যবহার করেন, তখন LINQ কুয়েরি স্টেটমেন্টগুলি parallel তে চলবে, প্রতিটি উপাদান আলাদা আলাদা থ্রেডে প্রসেস হবে।
PLINQ কুয়েরি সাধারণ LINQ কুয়েরির মতোই লেখা হয়, তবে আপনি .AsParallel()
মেথড ব্যবহার করে সেটি মাল্টিথ্রেডেড করে তুলতে পারবেন। নিচে একটি উদাহরণ দেওয়া হল যেখানে একটি সাধারণ LINQ কুয়েরিকে PLINQ তে রূপান্তর করা হয়েছে।
using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
static void Main()
{
// একটি বড় ডেটাসেট
List<int> numbers = Enumerable.Range(1, 1000000).ToList();
// সাধারণ LINQ কুয়েরি (একক থ্রেড)
var sum1 = numbers.Where(n => n % 2 == 0).Sum();
Console.WriteLine($"Sum of even numbers (single-threaded): {sum1}");
// PLINQ কুয়েরি (পারালাল থ্রেড)
var sum2 = numbers.AsParallel().Where(n => n % 2 == 0).Sum();
Console.WriteLine($"Sum of even numbers (parallel): {sum2}");
}
}
এখানে:
.AsParallel()
মেথড ব্যবহার করা হয়েছে যা numbers
লিস্টটিকে parallel ফর্ম্যাটে রূপান্তরিত করে।PLINQ এর মূল কৌশল হল parallel execution, যা একাধিক থ্রেডে ডেটা প্রসেসিং করতে সক্ষম, এবং এটি ডেটাবেস বা ইন-মেমরি ডেটার বড় সেটে কার্যকরী।
মাল্টিথ্রেডিং হল একটি পদ্ধতি যেখানে একাধিক থ্রেড একই সময়ে কাজ সম্পন্ন করতে পারে। PLINQ মাল্টিথ্রেডিংয়ের সুবিধা নেয়, কিন্তু এটি অনেক বেশি স্বয়ংক্রিয়ভাবে কাজ করে। আপনাকে ডেটা প্রসেসিংয়ের জন্য আলাদা থ্রেড ম্যানেজমেন্ট বা লকিং মেকানিজম লিখতে হয় না।
এখানে PLINQ এবং সাধারণ মাল্টিথ্রেডিংয়ের মধ্যে পার্থক্য দেওয়া হলো:
যদিও PLINQ সাধারণত মাল্টিথ্রেডিং এর অনেক সুবিধা প্রদান করে, তবুও কিছু বিশেষ পরিস্থিতিতে আপনাকে এর ব্যবহার সংক্রান্ত কিছু বিষয়ের প্রতি লক্ষ্য রাখতে হবে:
PLINQ ব্যবহার করার সময় ডিফল্টভাবে সিকোয়েন্স অর্ডার (অর্থাৎ, প্রথমে যেভাবে ডেটা এসেছে) বজায় থাকে না। আপনি যদি নির্দিষ্ট অর্ডারে ফলাফল চান তবে আপনাকে .AsSequential() ব্যবহার করতে হবে।
var result = numbers.AsParallel().OrderBy(n => n).AsSequential();
PLINQ তে অপেক্ষিত ব্যতিক্রম (Exceptions) ঘটতে পারে, এবং আপনার কোডে সেগুলো সঠিকভাবে ধরতে হবে। আপনি .WithDegreeOfParallelism(n)
ব্যবহার করে প্রক্রিয়ায় থ্রেড সংখ্যা সীমিত করতে পারেন এবং AggregateException হ্যান্ডেল করতে পারেন।
PLINQ ব্যবহারের সময়, এটি নিশ্চিত করে যে থ্রেডগুলি একে অপরকে ক্ষতিগ্রস্ত না করে ডেটা প্রসেস করছে, তবে আপনাকে নিশ্চিত করতে হবে যে আপনি যে ডেটার উপর কাজ করছেন তা Thread-Safe।
PLINQ এবং মাল্টিথ্রেডিং একত্রে ব্যবহৃত হলে বড় ডেটাসেটের জন্য বিশেষভাবে উপযোগী হতে পারে, যেমন:
এটি বিশেষভাবে উপকারী হতে পারে যখন আপনি এমন অ্যাপ্লিকেশন তৈরি করছেন যা বড় ডেটাসেট বা কম্প্লেক্স ক্যালকুলেশন পরিচালনা করে, এবং যেখানে পারফরম্যান্স একটি গুরুত্বপূর্ণ সমস্যা।
PLINQ হল LINQ এর একটি শক্তিশালী বৈশিষ্ট্য যা মাল্টিথ্রেডিং এবং পারালাল প্রসেসিং সমর্থন করে, যা ডেটা প্রসেসিংয়ের পারফরম্যান্স বৃদ্ধি করতে সহায়তা করে। এটি সাধারণ মাল্টিথ্রেডিং থেকে অনেক সহজ এবং কার্যকরী, কারণ এটি স্বয়ংক্রিয়ভাবে থ্রেড পরিচালনা এবং ডেটাবেসের সঙ্গে কাজ করার সুযোগ প্রদান করে।
PLINQ (Parallel LINQ) হল LINQ (Language Integrated Query)-এর একটি সম্প্রসারণ যা Parallel Programming এর সুবিধা নিয়ে আসে। PLINQ-এর মাধ্যমে আপনি একই LINQ Query-কে multiple threads-এ চালাতে পারেন, ফলে ডেটা প্রসেসিং আরও দ্রুত হয়, বিশেষ করে যখন বড় ডেটাসেট নিয়ে কাজ করছেন।
PLINQ মূলত multithreading এবং parallelism ব্যবহার করে ডেটা প্রসেসিংয়ের গতি বৃদ্ধি করে, যাতে CPU-bound operations (যেমন, বড় ডেটা সেটের উপর গ্রুপিং, ফিল্টারিং, মেমরি ইত্যাদির উপর কাজ) আরও কার্যকরীভাবে সম্পন্ন হতে পারে।
PLINQ সাধারণত large-scale data processing যেমন data aggregation, sorting, filtering, grouping, বা calculations এর জন্য ব্যবহৃত হয়, যেখানে একই ধরনের কাজ একাধিক থ্রেডে কার্যকরভাবে ভাগ করা যায়।
AsParallel()
মেথড ব্যবহার করা হয়। এটি LINQ কুয়েরিকে parallel query-এ রূপান্তরিত করে।ধরা যাক, আমাদের কাছে একটি বড় সংখ্যার integers এর লিস্ট রয়েছে, এবং আমরা চাই এই সংখ্যাগুলোর মধ্যে even numbers বের করতে এবং তাদের দ্বিগুণ মান বের করতে। এটি PLINQ ব্যবহার করে কিভাবে করা যেতে পারে তা দেখানো হলো:
using System;
using System.Linq;
class Program
{
static void Main()
{
var numbers = Enumerable.Range(1, 1000000).ToArray();
// PLINQ ব্যবহার করে even numbers বের করা এবং তাদের দ্বিগুণ করা
var doubledEvenNumbers = numbers
.AsParallel() // Parallel query চালাতে
.Where(n => n % 2 == 0) // Even numbers ফিল্টার করা
.Select(n => n * 2) // Each even number এর দ্বিগুণ তৈরি করা
.ToArray(); // ফলাফল array-এ রূপান্তরিত করা
Console.WriteLine($"Total Even Numbers Processed: {doubledEvenNumbers.Length}");
}
}
এখানে, AsParallel() ব্যবহার করে LINQ কুয়েরিটি parallel execution-এ রূপান্তরিত করা হয়েছে, যার ফলে Where এবং Select অপারেশনগুলো একাধিক থ্রেডে একসাথে কার্যকরীভাবে কাজ করবে এবং দ্রুত ফলাফল দেবে।
PLINQ ব্যবহারের কিছু গুরুত্বপূর্ণ কারণ:
PLINQ ব্যবহারের কিছু সীমাবদ্ধতা রয়েছে, যেগুলি জানলে আরও কার্যকরীভাবে এর ব্যবহার করা যায়:
PLINQ হল Parallel LINQ, যা LINQ কুয়েরিগুলোকে একাধিক থ্রেডে একসাথে চালানোর মাধ্যমে কার্যকারিতা বৃদ্ধি করতে সহায়তা করে। এটি ডেটার বড় সেটগুলোর জন্য উপকারী, যেখানে parallel processing থ্রেডগুলির মাধ্যমে পারফরম্যান্স উন্নত হয়। PLINQ ব্যবহার করে CPU-র সম্পদগুলি দ্রুতগতিতে কাজে লাগানো সম্ভব হয় এবং ডেটা প্রসেসিংয়ে উল্লেখযোগ্য গতি বৃদ্ধি পায়। তবে, এটি ছোট ডেটাসেট বা I/O-bound অপারেশনের জন্য উপযুক্ত নয়।
LINQ (Language Integrated Query) একটি শক্তিশালী ডেটা ফিল্টারিং এবং প্রসেসিং টুল, তবে কিছু ক্ষেত্রে ডেটার পরিমাণ খুব বড় হতে পারে, যার ফলে কুয়েরি প্রক্রিয়াকরণ সময়সাপেক্ষ হয়ে ওঠে। Parallel Query Execution হল LINQ এর একটি বৈশিষ্ট্য, যা System.Linq লাইব্রেরির মাধ্যমে ডেটা প্রসেসিংকে দ্রুত করতে সাহায্য করে, বিশেষ করে যখন আপনি বড় আকারের ডেটা সেটের উপর কাজ করছেন। এটি parallel programming এর ধারণা ব্যবহার করে, যার মাধ্যমে আপনি একই কাজকে একাধিক থ্রেডে ভাগ করে দ্রুত ফলাফল পেতে পারেন।
Parallel LINQ (PLINQ) LINQ এর একটি এক্সটেনশন যা মাল্টিপল থ্রেড ব্যবহার করে LINQ কুয়েরি এর কার্যকারিতা বৃদ্ধি করে। PLINQ, সাধারণ LINQ কুয়েরির মতোই ব্যবহার করা যায়, তবে এটি ডেটা প্রসেসিংয়ের জন্য প্যারালাল থ্রেড ব্যবহার করে, যা কাজের গতি অনেক বাড়িয়ে দেয়।
PLINQ ব্যবহারের মাধ্যমে, LINQ কুয়েরি গুলো প্যারালালভাবে System.Threading.Tasks নামক থ্রেডিং পদ্ধতি ব্যবহার করে একাধিক প্রসেসে ভাগ হয়ে একযোগে কার্যকর হয়।
PLINQ ব্যবহার করতে হলে আপনাকে AsParallel() মেথড ব্যবহার করতে হবে, যা LINQ কুয়েরির ডেটাকে প্যারালাল প্রসেসিংয়ের জন্য প্রস্তুত করে।
var numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var query = numbers.AsParallel()
.Where(n => n % 2 == 0)
.Select(n => n * 2);
foreach (var number in query)
{
Console.WriteLine(number);
}
এখানে, AsParallel() মেথড দিয়ে LINQ কুয়েরি প্যারালাল ভাবে চালানো হয়েছে। এর ফলে, সংখ্যাগুলোর ফিল্টারিং এবং ট্রান্সফর্মেশন কাজটি একাধিক থ্রেডে ভাগ হয়ে দ্রুত সম্পন্ন হবে।
var orderedQuery = numbers.AsParallel()
.AsOrdered()
.Where(n => n % 2 == 0)
.Select(n => n * 2);
var query = numbers.AsParallel()
.WithDegreeOfParallelism(4)
.Where(n => n % 2 == 0);
এখানে, কুয়েরি শুধুমাত্র ৪টি থ্রেডে কাজ করবে।
CancellationTokenSource cts = new CancellationTokenSource();
var query = numbers.AsParallel()
.WithCancellation(cts.Token)
.Where(n => n % 2 == 0);
PLINQ তে এক্সসেপশন হ্যান্ডলিং সাধারণ LINQ এর মতোই করা যায়, তবে এক্ষেত্রে যদি কোনো এক্সসেপশন ঘটে, তবে তা AggregateException আকারে ধরা পড়ে, যা multiple exceptions ধারণ করতে সক্ষম। এক্সসেপশন হ্যান্ডল করার উদাহরণ:
try
{
var query = numbers.AsParallel()
.Where(n => n < 0) // Invalid logic causing an exception
.Select(n => 10 / n);
foreach (var number in query)
{
Console.WriteLine(number);
}
}
catch (AggregateException ex)
{
foreach (var innerException in ex.InnerExceptions)
{
Console.WriteLine(innerException.Message);
}
}
Parallel LINQ (PLINQ) LINQ কুয়েরিগুলিকে মাল্টি-থ্রেডেড পদ্ধতিতে কার্যকরী করার জন্য একটি শক্তিশালী টুল। এটি ডেটা প্রসেসিংয়ের গতি বৃদ্ধি করে, বিশেষত বড় ডেটা সেটের ক্ষেত্রে। তবে, ছোট ডেটা সেটে এর ব্যবহার থেকে কিছু পারফরম্যান্সের হানি হতে পারে, এবং এতে কিছু সীমাবদ্ধতাও আছে যেমন থ্রেড ম্যানেজমেন্ট এবং থ্রেড সেফটি। PLINQ-এ এক্সসেপশন হ্যান্ডলিং এবং ডিবাগিং টেকনিকস ব্যবহারের মাধ্যমে আপনি কার্যকরী এবং স্থিতিশীল কোড তৈরি করতে পারেন।
PLINQ (Parallel LINQ) হল LINQ-এর একটি এক্সটেনশন যা মাল্টি-কোর প্রসেসর ব্যবহার করে কোয়েরির কার্যক্ষমতা বাড়ানোর জন্য প্যারালাল প্রসেসিং সক্ষম করে। PLINQ মূলত LINQ কে মাল্টি-থ্রেডেড বা প্যারালাল অপারেশন চালাতে সক্ষম করে, যার মাধ্যমে বৃহৎ ডেটাসেটের উপর দ্রুত ডেটা প্রসেসিং করা যায়। তবে PLINQ-এর কিছু পারফরম্যান্স সুবিধা এবং কিছু সীমাবদ্ধতাও রয়েছে।
বৃহৎ ডেটাসেটের জন্য দ্রুততা: PLINQ বড় ডেটাসেটের উপরে কাজ করার সময় অনেক দ্রুত ফলাফল প্রদান করতে পারে, কারণ এটি মাল্টি-কোর প্রসেসর ব্যবহার করে কাজ করে, যা CPU এর সক্ষমতা সম্পূর্ণভাবে ব্যবহার করে। এর মাধ্যমে একাধিক থ্রেড একই সময়ে কোয়েরি প্রক্রিয়া করতে পারে, ফলে ফলস্বরূপ সময় কমে যায়।
উদাহরণ:
var numbers = Enumerable.Range(1, 1000000);
var evenNumbers = numbers.AsParallel()
.Where(n => n % 2 == 0)
.ToList();
এখানে, AsParallel() মেথড ব্যবহার করা হয়েছে যা কোয়েরি প্রক্রিয়া মাল্টি-থ্রেডেড ভাবে কার্যকর করবে, ফলে দ্রুততর ফলাফল পাওয়া যাবে।
কেবল সিম্পল অপারেশনগুলোর জন্য উপযুক্ত: PLINQ কেবল তখনই কার্যকর যখন আপনি সিম্পল বা স্টেটলেস অপারেশন পরিচালনা করছেন। যদি কোয়েরি অথবা প্রসেসে কোন স্টেটফুল অপারেশন (যেমন, শেয়ার করা ভ্যারিয়েবল বা রিসোর্স ব্যবহার) থাকে, তবে PLINQ এর পারফরম্যান্সের উপকারিতা কমে যেতে পারে এবং রেস কন্ডিশন সৃষ্টি হতে পারে।
উদাহরণ:
যদি কোনো শেয়ার করা ভ্যারিয়েবল বা রিসোর্সে প্যারালাল কোয়েরির মাধ্যমে একাধিক থ্রেড একসাথে অ্যাক্সেস করে, তবে তার ফলস্বরূপ race condition বা data corruption হতে পারে।
কম ছোট ডেটাসেটের জন্য কার্যকর নয়: PLINQ-এর পারফরম্যান্সের সুবিধা তখনই আসে যখন ডেটাসেট বড় এবং প্রসেসিংয়ের জন্য অনেক সময় নেয়। ছোট ডেটাসেটের ক্ষেত্রে parallelization করতে গেলে, এতে সঠিকভাবে কার্যকর হয় না, বরং অতিরিক্ত overhead বাড়ে। সেক্ষেত্রে, সাধারণ LINQ-এর চেয়ে PLINQ বেশি সময় নিতে পারে।
উদাহরণ:
ছোট একটি ডেটাসেট (যেমন, ১০-২০টি আইটেম) এর উপর AsParallel() ব্যবহারের ফলে প্ল্যানিং, থ্রেডিং ইত্যাদি অতিরিক্ত লোড তৈরি হতে পারে, যা কার্যকর ফলাফল পেতে বাধা দিতে পারে।
প্রকাশিত ত্রুটির হ্যান্ডলিং: PLINQ কোয়েরি পরিচালনার সময় বিভিন্ন থ্রেডের মধ্যে ত্রুটি বা এক্সেপশন হ্যান্ডলিং কিছুটা কঠিন হতে পারে। একাধিক থ্রেডে ত্রুটি ঘটলে তা সঠিকভাবে ধরতে এবং পুনরুদ্ধার করতে PLINQ কিছুটা জটিল হতে পারে। এ কারণে PLINQ এর মাধ্যমে ত্রুটি হ্যান্ডলিং খুব সাবধানতার সাথে করতে হবে।
উদাহরণ:
try
{
var results = data.AsParallel()
.Select(x =>
{
if (x == 0) throw new InvalidOperationException("Zero found");
return 100 / x;
})
.ToList();
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
যদি কোনো থ্রেডে ত্রুটি ঘটে, তবে এটি অবিলম্বে InvalidOperationException
বা অন্য যে কোনো এক্সেপশন ছুঁড়ে ফেলবে।
PLINQ একটি শক্তিশালী টুল যা মাল্টি-কোর প্রসেসর ব্যবহার করে LINQ কোয়েরি কার্যকারিতা বাড়ায়, তবে এর কিছু সীমাবদ্ধতা এবং পারফরম্যান্স কনসিডারেশন রয়েছে। এটি বড় ডেটাসেটের জন্য খুবই উপকারী, তবে ছোট ডেটাসেট, স্টেটফুল অপারেশন, এবং কম কোর ক্ষমতাসম্পন্ন সিস্টেমের জন্য সাবধানে ব্যবহার করা উচিত। PLINQ এর পারফরম্যান্স সঠিকভাবে উপভোগ করার জন্য, সিস্টেম এবং ডেটাসেটের প্রকারভেদ বুঝে ব্যবহার করতে হবে।
PLINQ (Parallel LINQ) LINQ এর একটি বৈশিষ্ট্য যা মাল্টি-থ্রেডিং ব্যবহার করে ডেটা প্রসেসিংকে দ্রুত এবং কার্যকরী করে তোলে। PLINQ ব্যবহার করলে, আপনি সমান্তরালভাবে (parallel) কোয়েরি পরিচালনা করতে পারেন, যার ফলে কোয়েরির পারফরম্যান্স উল্লেখযোগ্যভাবে বাড়ে, বিশেষত যখন বড় ডেটাসেটের উপর কাজ করা হয়।
তবে, PLINQ কোডে Exception Handling এর সাথে কিছু বিশেষ সতর্কতা অবলম্বন করা প্রয়োজন, কারণ যখন একাধিক থ্রেডে সমান্তরাল কোয়েরি কার্যকরী হয়, তখন একাধিক থ্রেডে একাধিক এক্সসেপশন ঘটতে পারে। PLINQ এ Exception Handling করার জন্য কিছু নির্দিষ্ট কৌশল এবং টেকনিকস রয়েছে।
PLINQ কোয়েরি সমান্তরালভাবে একাধিক থ্রেডে এক্সিকিউট হয়, এবং একাধিক এক্সসেপশন একসাথে ঘটতে পারে। যখন একাধিক এক্সসেপশন ঘটে, PLINQ AggregateException ফেলে। এটি একটি কোলেকশন যা একাধিক এক্সসেপশন ধারণ করতে পারে।
PLINQ কোয়েরি চালানোর সময় আপনি AggregateException ব্যবহার করে সমস্ত এক্সসেপশনগুলো ধরতে পারেন এবং সেগুলো একসাথে হ্যান্ডল করতে পারেন।
using System;
using System.Linq;
using System.Threading.Tasks;
public class Program
{
public static void Main()
{
var numbers = new int[] { 1, 2, 0, 4, 5 }; // 0 দ্বারা ডিভাইড হবে একটি ভ্যালু
try
{
// PLINQ কোয়েরি - এখানে divideByZero এক্সসেপশন ঘটবে
var result = numbers.AsParallel()
.Select(n => 10 / n)
.ToList(); // Exception ঘটলে এটি এক্সপ্লোড করবে
foreach (var num in result)
{
Console.WriteLine(num);
}
}
catch (AggregateException ex)
{
// একাধিক এক্সসেপশনগুলো এখানে ধরা হবে
Console.WriteLine("এক্সসেপশন ঘটেছে:");
foreach (var innerEx in ex.Flatten().InnerExceptions)
{
Console.WriteLine(innerEx.Message); // এক্সসেপশন মেসেজ দেখান
}
}
}
}
এখানে:
AsParallel()
ব্যবহার করে সমান্তরালভাবে ডেটা প্রসেস করা হচ্ছে।Select
এর মধ্যে 10 কে বিভক্ত করার সময় কোনো DivideByZeroException
ঘটলে, এটি একটি AggregateException ফেলে।catch (AggregateException ex)
ব্লক ব্যবহার করে একাধিক এক্সসেপশন হ্যান্ডল করা হয়েছে।আউটপুট:
এক্সসেপশন ঘটেছে:
Attempted to divide by zero.
এখানে ex.Flatten().InnerExceptions
ব্যবহার করে সমস্ত এক্সসেপশন একত্রে দেখানো হচ্ছে।
PLINQ-এ আপনি ContinueOnCapturedContext অপশনটি ব্যবহার করে কিভাবে এক্সসেপশনগুলোকে ম্যানেজ করবেন, তা নির্ধারণ করতে পারেন। এটা বিশেষ করে UI থ্রেডে (যেমন Windows Forms বা WPF) Exception Handling এর সময় ব্যবহৃত হয়। এই অপশনটি ব্যবহার করলে, PLINQ প্রয়োগের সময় থ্রেড কনটেক্সট রক্ষা করে এবং UI থ্রেডে ফিরে এসে এক্সসেপশন হ্যান্ডল করতে সাহায্য করে।
var numbers = new int[] { 1, 2, 0, 4, 5 };
try
{
var result = numbers.AsParallel()
.WithExecutionMode(ParallelExecutionMode.ForceParallel)
.Select(n => 10 / n)
.ToList();
}
catch (AggregateException ex)
{
foreach (var innerEx in ex.Flatten().InnerExceptions)
{
Console.WriteLine(innerEx.Message);
}
}
এটি PLINQ কোয়েরি চলাকালীন একাধিক থ্রেডে একাধিক এক্সসেপশন সমর্থন করে এবং AggregateException
দিয়ে সমস্ত এক্সসেপশনকে একত্রে ধরে।
PLINQ কোয়েরি চালানোর সময় যদি আপনি চান যে প্রতিটি পৃথক থ্রেডের মধ্যে এক্সসেপশন হ্যান্ডলিং করা হোক, তবে আপনি Try-Catch ব্লক ব্যবহার করে কোয়েরির মধ্যে এক্সসেপশন হ্যান্ডল করতে পারেন।
using System;
using System.Linq;
public class Program
{
public static void Main()
{
var numbers = new int[] { 1, 2, 0, 4, 5 };
var result = numbers.AsParallel()
.Select(n =>
{
try
{
return 10 / n;
}
catch (Exception ex)
{
Console.WriteLine($"Error processing {n}: {ex.Message}");
return 0; // Default value in case of error
}
})
.ToList();
foreach (var num in result)
{
Console.WriteLine(num); // Will print 0 for the zero division case
}
}
}
এখানে:
n = 0
হয়, তখন DivideByZeroException
ধরা হবে এবং একটি ডিফল্ট মান (যেমন 0
) রিটার্ন করা হবে।আউটপুট:
Error processing 0: Attempted to divide by zero.
10
5
0
2
2
এখানে, 0
দিয়ে বিভাজন ঘটানোর কারণে Error processing 0 মেসেজ দেখা যাচ্ছে এবং অন্যান্য সঠিক রেজাল্ট দেখা যাচ্ছে।
PLINQ কোয়েরি চালানোর সময় একাধিক এক্সসেপশন ঘটতে পারে, যা AggregateException দ্বারা সংকলিত হয়। একাধিক এক্সসেপশন হ্যান্ডলিং করার জন্য try-catch ব্লক এবং AggregateException
ব্যবহার করা গুরুত্বপূর্ণ। PLINQ এর সাথে exception handling করতে হলে কিছু কৌশল অনুসরণ করতে হবে, যেমন Exception Flattening, UI Thread Handling এবং individual thread exception handling।
common.read_more