Как работают цепочки await в C#?
Я много раз читал, что если await встречает Таск, который ещё не выполнен, то метод возвращает незавершённый таск и выполнение продолжается в вызывающем методе.
Видимо, вы не дочитали, либо недопоняли.

Возьму ваш первый пример, но немного его видоизмению, чтобы было понятнее, что проиходит:
static async Task Method1Async()
        {
            Console.WriteLine("Starting Method1Async Thread id: "+ Thread.CurrentThread.ManagedThreadId);
            var task = Method2Async();
            await task; // До этой точки код выполняется синхронно (если таска ещё не готова)
            Console.WriteLine("End Method1Async Thread id: " + Thread.CurrentThread.ManagedThreadId);
        }
        
        static async Task Method2Async()
        {
            Thread.Sleep(100); // Thread.Sleep - это блокирующая операция
            Console.WriteLine("Starting Method2Async Thread id: "+ Thread.CurrentThread.ManagedThreadId);
            await Task.Yield(); // До этой точки код выполняетя синхронно. Task.Yield освобождает поток всегда
            Console.WriteLine("End Method2Async Thread id: " + Thread.CurrentThread.ManagedThreadId);
        }
Подробнее можете узнать, если загуглите TAP.docx
Дружище, так это как раз то самое место, где спрашивают, если не нашел, не понял, не дочитал