Библиотека базового класса Microsoft.NET предоставляет несколько способов создания потока и запуска его. В принципе, вызов очень похож на любой другой, предоставляющий один и тот же сервис: создайте объект, представляющий поток выполнения (или более), назначьте ему делегат, представляющий исполняемый поток для выполнения, и, в конечном счете, в зависимости от подписи делегата, объекта как параметр.
Ну, есть два подхода (по существу):
1) Использование класса System.Threading.Thread
.
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)? Почему? Узоры? Каков наилучший подход?
У меня такое чувство, что ответ: "Зависит от ситуации". Не могли бы вы перечислить некоторые ситуации, когда один подход лучше другого?