Thread.Start () против ThreadPool.QueueUserWorkItem ()

Библиотека базовых классов 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)?

  • Причины производительности?
  • Шаблоны?
  • Какой подход лучше?

У меня такое ощущение, что ответ: «Зависит от ситуации». Не могли бы вы перечислить некоторые ситуации, когда один подход лучше другого?

42
задан Andry 30 November 2018 в 06:19
поделиться