2013-03-28 3 views
1

У меня есть приложение-приложение, и я хочу, чтобы каждая запись/отправка была связана с каким-то контекстом. Я заметил, что иногда, когда новые потоки создаются, система, похоже, просто повторно использует существующий поток.Как вы отслеживаете потоки/контексты потоков?

Когда я создаю новый поток/задачу, есть ли какая-то уникальная информация, которую я могу получить, это означает, что я нахожусь в потоке A или потоке B (даже если CLR решит использовать тот же поток)?

ответ

4

Когда вы создаете новый поток, он всегда будет создавать новый поток.

При использовании потока пула потоков вы намеренно не создаете новый поток и вместо этого повторно используете один из пула.

Когда вы используете Task, он будет по умолчанию использовать потоки пула потоков, если не задана опция создания/продолжения задачи .

Вы можете использовать Thread.CurrentThread.ManagedThreadId, чтобы получить идентификатор текущего потока, но, помимо целей отладки/разработки, вы, вероятно, не должны полагаться на него.

Вообще говоря, для вашего кода не должно иметь значения, создан ли новый поток или он используется повторно. Если это имеет значение, это признак того, что с вашим кодом что-то не так, и вы должны внимательно посмотреть на то, на что вы полагаетесь и почему.

+0

Спасибо за информацию. Что касается: 'не должно иметь значения для вашего кода, будет ли новый поток создан или один повторно используется', для обработки повторного ввода службы мне нужно знать, какой поток вызвал вызов, чтобы я мог заблокировать его до тех пор, пока ответ возвращается. Каков наилучший способ справиться с этим? – sircodesalot

+0

@sircodesalot Почему поток, отправивший запрос, должен быть тем, кто обрабатывает ответ? – Servy

+0

Потому что я хочу заблокировать вызов до тех пор, пока ответ не вернется. Есть ли другой способ сделать это? – sircodesalot