Всегда ли асинхронный асинхронный в C #? [Дубликат]

На этот вопрос уже есть ответ здесь:

C # Async - Как это работает? 3 ответа

Я занимаюсь НИОКР наasync а такжеawait для моего проекта. Я узнал, что когдаasync Метод вызывается, он освобождает поток и позволяет другим использовать этот поток. Мы можем установить обратный вызов для ожидаемого метода, используяawait Ключевое слово и этот метод возвращает значение, когда результат готов. Если это произойдет:

Мы должны иметь возможность получить доступ кUI кратко между операциями.Время выполнения должно быть быстрее обычного синхронного вызова метода.

В моем случае у меня нет вопросов оpoint 1, Но дляpoint 2время выполнения похоже на синхронный вызов метода. Например, см.Sample Code 1 а такжеSample Output 1

Пример кода 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;
        }
    }

Пример вывода 1:

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

Но если я позвонюasync метод сTask.Run(()=> ) (НапримерSample Code 2 а такжеSample Output 2), это уменьшает время выполнения по сравнению с первым примером (Sample Code 1).

Пример кода 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;
        }
    }

Пример вывода 2:

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

У меня вопрос, почему первый пример (Sample Code 1) занимает время, как синхронный вызов метода?

Ответы на вопрос(1)

Ваш ответ на вопрос