Что такое поток
Что проверяют
Понимаете ли вы, что в C# поток руками сегодня почти не создают, и различаете ли три разные вещи: поток операционной системы, задачу и асинхронное ожидание. Собеседующий проверяет модель в голове, а не знание сигнатуры конструктора.
Как отвечать
Поток это единица планирования операционной системы со своим стеком (по умолчанию около мегабайта) и общей с остальными потоками кучей процесса. Класс Thread создаёт именно такой поток, и это дорого, поэтому среда держит пул потоков, а прикладной код работает с Task.
Дальше стоит развести понятия. Thread это поток. Task это обещание результата, которое обычно выполняется на потоке пула. async и await это способ не занимать поток на время ожидания.
Ключевая мысль, которую ждут: ожидание настоящей операции ввода и вывода поток не держит. Запрос уходит в операционную систему, поток возвращается в пул, продолжение метода выполняется после завершения. Поэтому оборачивать сетевой вызов в Task.Run бессмысленно, это только занимает поток пула.
Про остановку: обычный поток по умолчанию приоритетный и удерживает процесс живым, потоки пула фоновые и завершаются вместе с ним. Прерывать поток принудительно в современной платформе нельзя, отмена кооперативная, через CancellationToken.
Синхронизация: lock для критической секции, Interlocked для счётчиков, SemaphoreSlim там, где внутри блокировки есть ожидание, конкурентные коллекции вместо ручных замков.
Где спотыкаются
Говорят, что async создаёт новый поток. Не создаёт: асинхронный метод выполняется на вызывающем потоке до первого ожидания, а продолжение подхватывает свободный поток пула.
Блокируются на результате задачи через Result или Wait внутри асинхронного кода и получают либо взаимную блокировку в средах с контекстом синхронизации, либо исчерпание пула под нагрузкой.
Пишут async void не в обработчике события. Такой метод нельзя дождаться, а исключение из него не ловится внешним try и роняет процесс целиком.