Задать вопрос
@super15

Зачем нужен Async Await в C#?

Не понимаю зачем использовать async await, перечитал много статей, но смысл не понял.
Ведь результат тот же, если метод делать не асинхронным.
Или, это нужно только для того, чтобы не морозить основной поток, но при этом не продолжать выполнение, пока не выполнится вторичный поток?
  • Вопрос задан
  • 1631 просмотр
Подписаться 1 Простой 2 комментария
Решения вопроса 2
Асинхронность - это про конкурентность исполнения. Многопоточность - про несколько потоков.

Асинхронность - это ты проснулся, поставил чайник, пошёл в душ. Услышал писк - вернулся, заварил чай и продолжил чистить зубы.

Многопоточность - это ты проснулся, пошёл в душ, а твоя девушка поставила чайник.
Ответ написан
@none7
Изначально async/await появились как способ изничтожить лаги окошек при I/O операциях. Раньше для этого требовалось создавать поток или возится с колбеками асинхронных функций и запускать Form.Invoke для доступа к форме. Асинхронные же обработчики событий не вешают основной поток и всегда выполняются в потоке формы.

Когда код встречает await, то немедленно возвращает поток в ThreadPool. Это позволяет параллельно обрабатывать множество задач нуждающихся в I/O, ограниченным числом потоков. Большое число потоков может выжрать всю виртуальную память, что не есть хорошо. Но есть и жирные минусы, lock не работает, скорость выполнения кода ниже.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Griboks
@Griboks Куратор тега C#
Это сахар, замораживающий текущую позицию выполнения в методе, пока выполняется асинхронный метод. Он заменяет создание потока, запуск потока, вызов коллбека по завершению потока. Так же он позволяет не выделять нижестоящий код в коолбек-метод.
Ответ написан
Комментировать
@chibitko
async/await нужен для оптимального использования ресурсов системы, существуют два вида тасок - таски ввода/вывода и таски многопотока, так вот при операциях IO нет смысла держать текущий поток, можно дать попользоваться ресурсами CPU тем кому нужнее, так вот раньше нужно было использовать IAsyncResult, это было неудобно, теперь для это есть синтаксический сахар и единый подход работы с асинхроностью и многопотоком
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы