La creación de un hilo es solo eso ... engendras un hilo único para ejecutar al mismo tiempo el hilo de proceso principal.
En TPL, si crea una Tarea, usará un grupo de subprocesos para encontrar un hilo libre para ejecutar la tarea. Esto puede ser más eficiente cuando crea muchas tareas porque TPL puede equilibrar la carga en cualquier cantidad de hilos libres (presumiblemente el número de hilos está equilibrado en función del número de núcleos que tiene, pero no lo sé con certeza.)
Finalmente, un BackgroundWorker ejecuta su trabajo en una secuencia separada. En realidad, es solo una buena abstracción que te saca de las partes complicadas del enhebrado, ya que se maneja para ti. También proporciona una forma de enviar actualizaciones de estado si no me equivoco. (no estoy seguro si esto usa el grupo de subprocesos de Windows, pero no me sorprendería)
Al final, tiene que elegir lo que es correcto para su programa, pero el propósito de las tareas TPL es permitirle programar tareas que se pueden ejecutar en paralelo, mientras que crear hilos o usar trabajadores de fondo puede ser mejor para operaciones de larga ejecución o para escenarios en los que quieres que el hilo de fondo viva esperando por alguna señal (a través de, sugeriría realmente usar RegisteredWait si solo estamos esperando que algún evento indique.)
+1 for 'ThreadPool' – Cornelius