Простыми словами:
Thread - это отдельный поток в котором вы хотите что-то выполнять параллельно от других потоков.
(например чтобы не зависал интерфейс, вы запускаете вашу задачу в отдельном потоке)
(например вы хотите задействовать все ядра процессора и запускаете несколько задач в нескольких параллельных потоках)
Task - это обертка над Thread которая позволяет переиспользовать созданные потоки (Пул потоков).
Переиспользовать потому-что создавать каждый раз Thread это очень долго и дорого.
Task-и так же предоставляют дополнительный фишки как:
- асинхронная модель (async/await),
- учёт количества ядер процессора,
- учёт простоя во время системных вызовов (сеть, файловая система и т.п.)
В любом случае Task-и это лучшее решение.