¿Es asíncrono siempre asíncrono en C #? [duplicar]

Esta pregunta ya tiene una respuesta aquí:

C # Async: ¿cómo funciona? 3 respuestas

Estoy haciendo I + D enasync yawait para mi proyecto Lo que he aprendido es que cuandoasync Se llama al método, libera el hilo y permite que otros lo usen. Podemos configurar la devolución de llamada para el método de espera usandoawait palabra clave y ese método devuelve valor cuando el resultado está listo. Si eso pasa:

Deberíamos poder acceder alUI brevemente entre operaciones.El tiempo de ejecución debe ser más rápido que la llamada al método síncrono habitual.

En mi caso, no tengo dudas sobrepoint 1, Pero parapoint 2, su tiempo de ejecución parece lo mismo que la llamada al método síncrono. Por ejemplo verSample Code 1 ySample Output 1

Código de muestra 1:

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Before Async Call");
            AsyncMethod();
            Console.WriteLine("After Async Call");

            Console.ReadLine();
        }

        public async static void AsyncMethod()
        {
            var firstValue = FirstAsyncMethod("FirstAsyncMethod has been called");
            Console.WriteLine("Middle of FirstAsyncMethod and SecondAsyncMethod");
            var secondValue = SecondAsyncMethod("SecondAsyncMethod has been called");
            Console.WriteLine(await firstValue);
            Console.WriteLine(await secondValue);
        }

        public static async Task<string> FirstAsyncMethod(string value)
        {
            for (int i = 0; i < 500000000; i++)
            {
                i = i + 1 - 1;
            }
            return "Success: "+value;
        }
        public static async Task<string> SecondAsyncMethod(string value)
        {
            for (int i = 0; i < 500000000; i++)
            {
                i = i + 1 - 1;
            }
            return "Success: " + value;
        }
    }

Salida de muestra 1:

Before Async Call
Middle of FirstAsyncMethod and SecondAsyncMethod
Success: FirstAsyncMethod has been called
Success: SecondAsyncMethod has been called
After Async Call

Pero si llamo alasync método conTask.Run(()=> ) (Por ejemploSample Code 2 ySample Output 2), reduce el tiempo de ejecución en comparación con el primer ejemplo (Sample Code 1)

Código de muestra 2:

class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Before Async Call");
            AsyncMethod();
            Console.WriteLine("After Async Call");

            Console.ReadLine();
        }

        public async static void AsyncMethod()
        {
            var firstValue =Task.Run(()=> FirstAsyncMethod("FirstAsyncMethod has been called"));
            Console.WriteLine("Middle of FirstAsyncMethod and SecondAsyncMethod");
            var secondValue = Task.Run(() => SecondAsyncMethod("SecondAsyncMethod has been called"));
            Console.WriteLine(await firstValue);
            Console.WriteLine(await secondValue);
        }

        public static async Task<string> FirstAsyncMethod(string value)
        {
            for (int i = 0; i < 500000000; i++)
            {
                i = i + 1 - 1;
            }
            return "Success: "+value;
        }
        public static async Task<string> SecondAsyncMethod(string value)
        {
            for (int i = 0; i < 500000000; i++)
            {
                i = i + 1 - 1;
            }
            return "Success: " + value;
        }
    }

Salida de muestra 2:

Before Async Call
Middle of FirstAsyncMethod and SecondAsyncMethod
After Async Call
Success: FirstAsyncMethod has been called
Success: SecondAsyncMethod has been called

Mi pregunta es, ¿por qué el primer ejemplo (Sample Code 1) tomando tiempo como llamada al método sincrónico?

Respuestas a la pregunta(1)

Su respuesta a la pregunta