Giới thiệu
Thuộc tính ManagedThreadId của Thread trả về định danh số nguyên duy nhất do CLR gán cho luồng được quản lý. Giá trị này không thay đổi trong vòng đời luồng.
Ví dụ 1: Thread thường và ThreadPool
using System;
using System.Threading;
public class Demo
{
public static void Main()
{
Thread thread = new Thread(new ThreadStart(Demo1));
ThreadPool.QueueUserWorkItem(new WaitCallback(Demo2));
Console.WriteLine("ManagedThreadId = " + thread.ManagedThreadId);
}
public static void Demo1()
{
Thread.Sleep(2000);
}
public static void Demo2(object stateInfo)
{
Console.WriteLine("Luồng thuộc managed thread pool? = " + Thread.CurrentThread.IsThreadPoolThread);
}
}
Kết quả
ManagedThreadId = 3
Luồng thuộc managed thread pool? = True
Ví dụ 2: Thread tự tạo và Start
using System;
using System.Threading;
public class Demo
{
public static void Main()
{
Thread thread = new Thread(new ThreadStart(Demo));
Console.WriteLine("ManagedThreadId = " + thread.ManagedThreadId);
thread.Start();
}
public static void Demo()
{
Console.WriteLine("Luồng thuộc managed thread pool? = " + Thread.CurrentThread.IsThreadPoolThread);
}
}
Kết quả
ManagedThreadId = 3
Luồng thuộc managed thread pool? = False
Phân biệt
ManagedThreadId: ID logic do CLR quản lý, duy nhất trong process.Thread.CurrentThread.ManagedThreadId: ID của luồng đang chạy code hiện tại.- Luồng ThreadPool được tái sử dụng, nhưng ManagedThreadId vẫn cố định cho từng luồng vật lý.
- Dùng
Thread.CurrentThread.ManagedThreadIdđể log/debug đa luồng.