Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C#

Lấy ID duy nhất của managed thread hiện tại trong C#

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.