Каковы преимущества использования async/await по сравнению с одной только библиотекой параллельных задач?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Каковы преимущества использования async/await по сравнению с одной только библиотекой параллельных задач?

Сообщение Anonymous »

Я знаю, что этот вопрос может быть немного тривиальным, но все ответы, которые я нахожу в Интернете, приводят меня в замешательство.
Я знаком с основными принципами работы async/await (как await асинхронно ждет завершения задачи, не блокируя основной поток),
но я не понимаю ее реальной выгоды, потому что мне кажется, что все, что вы делаете с помощью async/await, можно сделать с помощью Task Paralel Библиотека.
Пожалуйста. рассмотрим этот пример, чтобы лучше понять, что я имею в виду:
Предположим, у меня есть SuperComplexMethod, который возвращает некоторое значение, и я хотел бы выполнить его параллельно, одновременно выполняя некоторые другие действия. Обычно я делаю это так:

Код: Выделить всё

internal class Program
{
private static void Main()
{
//I will start a task first that will run asynchroniously
var task = Task.Run(() => SuperComplexMethod());

//Then I will be doing some other work, and then get the result when I need it
Console.WriteLine("Doing some other work...");
var result = task.Result;
}

static string SuperComplexMethod()
{
Console.WriteLine("Doing very complex calculations...");
Thread.Sleep(3000);
return "Some result";
}
}
Вот как мне это сделать, используя async/await:

Код: Выделить всё

internal class Program
{
private static void Main()
{
var task = SuperComplexMethodAsync();

Console.WriteLine("Doing some other work...");
var result = task.Result;
}

//I have to create this async wrapper that can wait for the task to complete
async static Task SuperComplexMethodAsync()
{
return await Task.Run(() => SuperComplexMethod());
}

static string SuperComplexMethod()
{
Console.WriteLine("Doing very complex calculations...");
Thread.Sleep(3000);
return "Some result";
}
}
Как вы можете видеть во втором примере, чтобы использовать подход async/await, мне нужно создать метод-оболочку, который запускает задачу и асинхронно ожидает чтобы оно завершилось. Очевидно, мне это кажется излишним, потому что я могу добиться того же самого поведения, не используя эту обертку с пометкой async/await.

Можете ли вы объяснить мне, что такого особенного в async/await и какие фактические преимущества он дает по сравнению с использованием только инструментов библиотеки параллельных задач?

Можете ли вы объяснить мне, что такого особенного в async/await и какие реальные преимущества он дает по сравнению с использованием только инструментов библиотеки параллельных задач?

Можете ли вы объяснить мне, что такого особенного в async/await? п>

Подробнее здесь: https://stackoverflow.com/questions/476 ... rary-alone
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»