Пул потоков (по замыслу) поддерживает работу потоков между вызовами. Это означает, что переменные ThreadStatic будут сохраняться между вызовами QueueUserWorkItem.
На это поведение тоже не стоит рассчитывать. ThreadPool будет (в конечном счете, по своему усмотрению) возвращать потоки обратно и позволять им заканчиваться, а также создавать новые потоки по мере необходимости.
Однако я бы поставил под сомнение ваш дизайн, если у вас возникнут проблемы с этим. Если вам нужны конкретные, детерминированные данные ThreadStatic для использования в QueueUserWorkItem, ваши подпрограммы потоков могут быть хорошими кандидатами для самостоятельной обработки потоков. ThreadStatic и ThreadPool не всегда являются отличной комбинацией - вам просто не обязательно иметь достаточный контроль (поскольку ThreadPool управляет потоками), чтобы действительно использовать преимущества и получать преимущества от переменных ThreadStatic. Вы никогда не узнаете, будут ли два рабочих элемента в одном и том же потоке, в разных потоках и должна ли (ре) инициализироваться переменная потока и т. Д.