There are two types of threads that the ThreadPool utilizes - worker and I/O threads.
According to this answer from Stephen Cleary:
... "the" thread pool is actually two thread pools: there's worker threads (that execute queued work) and there's I/O threads (that enlist in the I/O completion port and handle low-level I/O completion).
From what I was able to read in the source/debug BCL with DnSpy there is actually just one queue. (correct me if I am wrong).
So my questions how does the call to
ThreadPool.QueueUserWorkItem(callback)
internally decide which type of thread to use for the WaitCallback delegate?