Getting the unique identifier for the current managed thread in C#

To get the unique identifier for the currently managed thread in C#, you can use the Thread.CurrentThread.ManagedThreadId property. This property returns an integer that uniquely identifies each managed thread within the application domain.

The ManagedThreadId is different from the operating system thread ID and is specifically designed for managed code debugging and logging purposes.

Syntax

Following is the syntax for getting the managed thread ID −

int threadId = Thread.CurrentThread.ManagedThreadId;

For a specific thread object −

Thread thread = new Thread(methodName);
int threadId = thread.ManagedThreadId;

Using ManagedThreadId with Regular Threads

Example

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();
        thread.Join();
    }
    
    public static void demo() {
        Console.WriteLine("Current thread ID = " + Thread.CurrentThread.ManagedThreadId);
        Console.WriteLine("Thread belongs to managed thread pool? = " + Thread.CurrentThread.IsThreadPoolThread);
    }
}

The output of the above code is −

ManagedThreadId = 4
Current thread ID = 4
Thread belongs to managed thread pool? = False

Using ManagedThreadId with ThreadPool

Example

using System;
using System.Threading;

public class Demo {
    public static void Main() {
        Console.WriteLine("Main thread ID = " + Thread.CurrentThread.ManagedThreadId);
        ThreadPool.QueueUserWorkItem(new WaitCallback(demo));
        Thread.Sleep(100);
    }
    
    public static void demo(object stateInfo) {
        Console.WriteLine("ThreadPool thread ID = " + Thread.CurrentThread.ManagedThreadId);
        Console.WriteLine("Thread belongs to managed thread pool? = " + Thread.CurrentThread.IsThreadPoolThread);
    }
}

The output of the above code is −

Main thread ID = 1
ThreadPool thread ID = 4
Thread belongs to managed thread pool? = True

Comparing Multiple Thread IDs

Example

using System;
using System.Threading;

public class Demo {
    public static void Main() {
        Console.WriteLine("Main thread ID: " + Thread.CurrentThread.ManagedThreadId);
        
        Thread thread1 = new Thread(() => PrintThreadInfo("Thread 1"));
        Thread thread2 = new Thread(() => PrintThreadInfo("Thread 2"));
        
        thread1.Start();
        thread2.Start();
        
        ThreadPool.QueueUserWorkItem(_ => PrintThreadInfo("ThreadPool thread"));
        
        thread1.Join();
        thread2.Join();
        Thread.Sleep(100);
    }
    
    public static void PrintThreadInfo(string name) {
        Console.WriteLine($"{name} ID: {Thread.CurrentThread.ManagedThreadId}, IsThreadPoolThread: {Thread.CurrentThread.IsThreadPoolThread}");
    }
}

The output of the above code is −

Main thread ID: 1
Thread 1 ID: 4, IsThreadPoolThread: False
Thread 2 ID: 5, IsThreadPoolThread: False
ThreadPool thread ID: 6, IsThreadPoolThread: True

Key Points

  • Each managed thread gets a unique integer ID within the application domain.

  • The ID is assigned when the thread is created, not when it starts executing.

  • Thread IDs are not reused within the same application domain, even after a thread terminates.

  • Use Thread.CurrentThread.ManagedThreadId to get the ID of the currently executing thread.

Conclusion

The ManagedThreadId property provides a reliable way to uniquely identify managed threads in C#. It's particularly useful for debugging, logging, and thread coordination scenarios where you need to track which thread is executing specific code.

Updated on: 2026-03-17T07:04:36+05:30

249 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements