প্রতিটি থ্রেড একটি এক্সিকিউশন কনটেক্সটে চলে যা সিকিউরিটি, কলচার, এবং অন্যান্য প্রসেস-వাইড সেটিং ধারণ করে। Thread.CurrentContext.ContextID প্রপার্টি বর্তমান কনটেক্সটের ইউনিক আইডেন্টিফায়ার রিটার্ন করে।
বেসিক উদাহরণ
using System;
using System.Threading;
namespace Demo
{
class MyClass
{
static void Main(string[] args)
{
Thread thread = Thread.CurrentThread;
thread.Name = "My new Thread";
Console.WriteLine($"থ্রেড নাম: {thread.Name}");
Console.WriteLine($"কারেন্ট কনটেক্সট আইডি: {Thread.CurrentContext.ContextID}");
Console.WriteLine($"ম্যানেজড থ্রেড আইডি: {Thread.CurrentThread.ManagedThreadId}");
Console.WriteLine($"থ্রেড স্টেট: {Thread.CurrentThread.ThreadState}");
Console.WriteLine($"ইজ ব্যাকগ্রাউন্ড: {Thread.CurrentThread.IsBackground}");
Console.WriteLine($"প্রায়োরিটি: {Thread.CurrentThread.Priority}");
Console.ReadKey();
}
}
}
আউটপুট
থ্রেড নাম: My new Thread
কারেন্ট কনটেক্সট আইডি: 0
ম্যানেজড থ্রেড আইডি: 1
থ্রেড স্টেট: Running
ইজ ব্যাকগ্রাউন্ড: False
প্রায়োরিটি: Normal
কনটেক্সট আইডি সম্পর্কে জানা দরকার
- ContextID 0: ডিফল্ট কনটেক্সট (বেশিরভাগ সিম্পল অ্যাপ্লিকেশনে)
- কনটেক্সট বদলে:
Thread.SetApartmentState, COM ইন্টারঅপ, রিমোটিং, বাSynchronizationAttributeব্যবহার সময় - ManagedThreadId vs ContextID: ManagedThreadId থ্রেডের ইউনিক আইডি, ContextID এক্সিকিউশন এনভায়রনমেন্টের আইডি
নতুন থ্রেডে কনটেক্সট দেখানো
using System;
using System.Threading;
public class ThreadContextDemo
{
public static void Main()
{
Console.WriteLine($"মেইন থ্রেড - ContextID: {Thread.CurrentContext.ContextID}, ManagedThreadId: {Thread.CurrentThread.ManagedThreadId}");
Thread newThread = new Thread(() =>
{
Console.WriteLine($"নতুন থ্রেড - ContextID: {Thread.CurrentContext.ContextID}, ManagedThreadId: {Thread.CurrentThread.ManagedThreadId}");
});
newThread.Start();
newThread.Join();
// থ্রেড পুল থ্রেড
ThreadPool.QueueUserWorkItem(_ =>
{
Console.WriteLine($"থ্রেড পুল - ContextID: {Thread.CurrentContext.ContextID}, ManagedThreadId: {Thread.CurrentThread.ManagedThreadId}");
});
Thread.Sleep(100); // পুল থ্রেড chạy হওয়ার জন্য অপেক্ষা
}
}
আউটপুট উদাহরণ
মেইন থ্রেড - ContextID: 0, ManagedThreadId: 1
নতুন থ্রেড - ContextID: 0, ManagedThreadId: 3
থ্রেড পুল - ContextID: 0, ManagedThreadId: 4
কনটেক্সট ফ্লো (ExecutionContext)
.NET-এ ExecutionContext (সিকিউরিটি, কলচার, AsyncLocal ইত্যাদি) থ্রেড জুড়ে ফ্লো করে।
using System;
using System.Threading;
var local = new AsyncLocal<string>();
local.Value = "Main";
ThreadPool.QueueUserWorkItem(_ =>
{
Console.WriteLine($"থ্রেড পুলে AsyncLocal: {local.Value}"); // "Main" পাবে
local.Value = "Pool";
});
Thread.Sleep(50);
Console.WriteLine($"মেইনে AsyncLocal: {local.Value}"); // "Main" (আইসোলেটেড)
সারসংক্ষেপ
Thread.CurrentContext.ContextID- বর্তমান কনটেক্সট আইডি (সাধারণত ০)Thread.CurrentThread.ManagedThreadId- থ্রেডের ইউনিক আইডি (অনন্য)- সাধারণ অ্যাপ্লিকেশনে কনটেক্সট আইডি সরাসরি ব্যবহার করা হয় না
- এডভান্সড সিনারিও: COM+, রিমোটিং, কাস্টম সিঙ্ক্রোনাইজেশন কনটেক্সট