Когда использовать await Task.Run(), а когда напрямую ожидать асинхронный методC#

Место общения программистов C#
Ответить
Anonymous
 Когда использовать await Task.Run(), а когда напрямую ожидать асинхронный метод

Сообщение Anonymous »

Я видел несколько сообщений на эту тему, но ответы сложны. Предположим, у меня есть следующий код:

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

static async Task Main(string[] args)
{
await Task.Run(LongRunningTask1);

await LongRunningTask2();

await Task.Run(LongRunningTask2);

Console.ReadLine();
}

static void LongRunningTask1()
{
Thread.Sleep(2000);
}

static async Task LongRunningTask2()
{
Thread.Sleep(2000);
}

Console.ReadLine();
Каждое из приведенных выше выражений await делает одно и то же.

Может ли кто-нибудь дать мне упрощенное описание того, когда вы будете использовать каждое из них?Кроме того, какое из трех выражений await создает отдельный поток? Я предполагаю, что это первое и третье. Если второй использует только поток пользовательского интерфейса, то как распределяется время выполнения между Main() и ожидаемой задачей?
Я читал, что второй вариант замедляет работу графического интерфейса (если, например, Main() вместо этого был обработчиком нажатия кнопки для программы WinForms). Тогда зачем использовать второй вариант? Что мне это дает?

Подробнее здесь: https://stackoverflow.com/questions/793 ... d-directly
Ответить

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

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

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

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

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