Библиотека базовых классов Microsoft .NET предоставляет несколько способов создания потока и его запуска. По сути, вызов очень похож на любой другой, предоставляющий тот же вид службы: создать объект, представляющий поток выполнения (или более), назначьте ему делегат, представляющий поток выполнения для выполнения и, в конечном итоге, в зависимости от сигнатуры делегата, объект в качестве параметра.
Что ж, есть два подхода (по существу):
1) Использование системы . Threading.Thread
class.
Thread curr = new Thread(myfunction); /* In a class, myfunction is a void taking an object */
curr.Start(new Object()); /* Or something else to be downcast */
2) Использование класса System.Threading.ThreadPool
.
ThreadPool.QueueUserWorkItem(myfunction, new Object()); /* Same philosophy here */
Есть ли какие-то особые причины, по которым я должен использовать 1) или 2)?
У меня такое ощущение, что ответ: «Зависит от ситуации». Не могли бы вы перечислить некоторые ситуации, когда один подход лучше другого?