Библиотека базовых классов 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)?
- Причины производительности?
- Шаблоны
- Каков наилучший подход?
У меня такое ощущение, что ответ таков: "Зависит от ситуации". Не могли бы вы перечислить некоторые ситуации, когда один подход лучше другого?