В чём отличие многопоточности и асинхронности в контексте .NET C#?
Я не до конца понимаю в чём ключевое отличие асинхронности и многопоточности. Как я понимаю многопоточность обеспечивается классом Thread(инкапсулированный поток ОС), а асинхронность - Task, Async, Await, ThreadPool. И мол вот, при использовании этих конструкций мы не блокируем вызывающий поток. Но ведь при классической многопоточности никакой поток так же не блокируется, мы просто его создаем, кормим ему задачу и всё - основной поток свободен. Тем более при асинхронности практически всегда подразумевается многопоточность - тот же ThreadPool который работает с тасками и запускает задачи в заранее заготовленных фоновых потоках. То же самое и с async/await. Можете пожалуйста помочь упорядочить всю эту информацию, заранее спасибо!