Этот асинхронный метод не имеет операторов 'await' и будет выполняться синхронно



Моя программа имеет 3 предупреждения следующего утверждения:




Этот асинхронный метод не имеет операторов 'await' и будет выполняться синхронно.
Рассмотрите возможность использования оператора 'await' для ожидания неблокирующих вызовов API,
или " ждите задания.Бежать(...) 'для выполнения работы, связанной с процессором, в фоновом потоке.




Что это за предупреждение ты пытаешься мне сказать? Что же мне делать?



Это мой код: он работает с использованием многопоточной обработки?



static void Main(string[] args)
{
Task task1 = new Task(Work1);
Task task2 = new Task(Work2);
Task task3 = new Task(Work3);

task1.Start();
task2.Start();
task3.Start();

Console.ReadKey();
}

static async void Work1()
{
Console.WriteLine("10 started");
Thread.Sleep(10000);
Console.WriteLine("10 completed");
}

static async void Work2()
{
Console.WriteLine("3 started");
Thread.Sleep(3000);
Console.WriteLine("3 completed");
}

static async void Work3()
{
Console.WriteLine("5 started");
Thread.Sleep(5000);
Console.WriteLine("5 completed");
}
804   4  

4 ответов:

Ключевое слово async само по себе не делает многого. Удалите его из вашего кода, и ваш код будет действовать точно так же.

Что делает async?

  • он изменяет то, что действительно внутри метода, в частности, он позволяет использовать ключевое слово await
  • В свою очередь, это означает, что тело метода будет преобразовано на основе awaits, которые присутствуют в теле метода.
  • и если метод возвращает значение, метод также является преобразовано, чтобы обернуть возвращаемое значение в Task.

Однако, если вы а) не имеете никаких await s в теле метода и Б) возвращаете void, то ничего особенного не будет достигнуто. Предупреждение компилятора действительно пытается прояснить это - метод async без каких-либо awaitS просто не имеет смысла. awaits являются более важной частью этой функции.

Да, ваш код, вероятно, будет использовать многопоточность. Однако это все равно произойдет, если вы просто удалите ключевое слово async. Поскольку вы не объяснили, почему он там, я предлагаю удалить его.

Если вам нужен шаблон async/await, вы можете использовать Task.Delay(), но я бы посоветовал вам прочитать больше об async / await, прежде чем использовать его:

static async void Work3()
{
    Console.WriteLine("5 started");
    await Task.Delay(5000);
    Console.WriteLine("5 completed");
}

Вы использовали ключевое слово 'async ' с методом, который указывает,что методы Work1 (), Work2() и Work3() выполняются асинхронно,но вы не использовали 'await' keyword.So он выполнялся так же синхронно.Используйте ключевое слово' await', Если вы хотите выполнить его асинхронно.

 static async void Work1()
 {
     Console.WriteLine("10 started");
    await Task.Delay(10000);
     Console.WriteLine("10 completed");
 }

 static async void Work2()
 {
     Console.WriteLine("3 started");
     await Task.Delay(3000);
     Console.WriteLine("3 completed");
 }

 static async void Work3()
 {
     Console.WriteLine("5 started");
     await Task.Delay(5000);
     Console.WriteLine("5 completed");
 }

Вы обозначили свои методы (Work1, Work2, Work3) ключевым словом async, но ни один из ваших кодов в этих методах не использует оператор await для вызова асинхронных вызовов.

Comments

    Ничего не найдено.