async/await в ASP.NET Core. Асинхронный код

Поділитися
Вставка
  • Опубліковано 14 сер 2020
  • Доброго времени суток. Сегодня разберем такую тему, как асинхронный код в ASP.NET Core приложении и как он работает, что означают ключевые слова async/await, для чего они нужны.
    Скачать исходный код проекта:
    alekseev74.ru/lessons/show/as...
    Видеокурсы по программированию:
    alekseev74.ru/courses
    #aspnet #csharp #программирование #видеоурок #обучение #alekseev74

КОМЕНТАРІ • 67

  • @gennadiigorbunov1027
    @gennadiigorbunov1027 3 роки тому +18

    Огромное спасибо вам за уроки ASP Core, стал лучше понимать! Очень жду новых!

  • @user-ey8tv3pf7r
    @user-ey8tv3pf7r Рік тому

    Спасибо большое за ваши ролики всё очень доступно и понятно! С нетерпением жду новых роликов!

  • @bilamalva
    @bilamalva 2 роки тому +1

    Наконец-то пришло понимание асинхронности. Спасибо огромное за урок!

  • @user-lu6fn3ob1b
    @user-lu6fn3ob1b 3 роки тому

    Спасибо за доступный видеоурок!

  • @hearyourmood9633
    @hearyourmood9633 3 роки тому +8

    отлично объясняешь , было бы круто послушать твое объяснение разницы между многопоточностью и асинхронностью

  • @Mr43046721
    @Mr43046721 2 роки тому

    Огромное спасибо за видео, наконец-то дошло то, что так часто спрашивают на собеседованиях. Стал чуть умнее :)

  • @user-ku6lc8zu4b
    @user-ku6lc8zu4b 4 роки тому

    Спасибо за труд. Было очень интересно послушать начинающему.

  • @user-xz1zb5cw1k
    @user-xz1zb5cw1k 2 роки тому

    Отличная работа, наконец то прочувствовал с более глубоким пониманием работу этих операторов. Подписался

  • @ivankarash2646
    @ivankarash2646 2 роки тому

    Спасибо за труд, единственный урок где действительно стало понятно как работает асинхронка.

  • @kulivers1998
    @kulivers1998 2 роки тому

    Очень хорошее объяснение, спасибо!

  • @salamatturdukhodzhaev3894
    @salamatturdukhodzhaev3894 2 роки тому

    Семен, Спасибо! Все четко и ясно.

  • @minimalstory
    @minimalstory 2 роки тому

    Все очень понятно. Спасибо.

  • @ramil9209
    @ramil9209 3 роки тому

    Очень круто, спасибо

  • @siarheisamusik416
    @siarheisamusik416 3 роки тому

    То, что нужно. Спасибо.

  • @codemystery
    @codemystery 3 роки тому

    шик, спасибо

  • @trashtalk450
    @trashtalk450 3 роки тому

    Спасибо!

  • @romanfersion6006
    @romanfersion6006 3 роки тому +21

    сделай пожалуйста видео по "Dependency injection"

  • @user-gz8qb7qr4q
    @user-gz8qb7qr4q 2 роки тому

    Огонь!

  • @AndreyO_777
    @AndreyO_777 3 роки тому

    спасибо большое

  • @user-gk5vv2vx8z
    @user-gk5vv2vx8z 4 роки тому

    Спасибо.

  • @user-rs7xm1ct4h
    @user-rs7xm1ct4h 3 роки тому +4

    Все класно и доходчиво расказано. Можеш сделать видео по многопоточности?

  • @user-xu8dq5nj3e
    @user-xu8dq5nj3e 3 роки тому

    Спасибо

  • @DjonNIK777
    @DjonNIK777 Рік тому +1

    На 10:55 идет речь о суффиксе Async для асинхронных методов. Раньше действительно такая рекомендация встречалась в msdn, но сейчас уже почти все асинхронное и скорее нужен суффикс Sync ))
    Так что лучше это решать на уровне договоренности по стилю кода в команде

  • @user-ku9xp7yf4c
    @user-ku9xp7yf4c 2 роки тому

    Кайф, просто и доступно, благодарю.

  • @coffeine_addict
    @coffeine_addict Рік тому

    Определенно лучшее объяснение из тех, что я видела. Для новичков - идеально!

  • @err0rgorinichvisuals498
    @err0rgorinichvisuals498 Рік тому

    Очень крутое видео и в принципе помогло решить кучу вопросов) знаю что ответ можно ждать долго, но всё же есть вопрос, если созданы асинхронные методы, в синхронных больше нет нужды в проекте?

  • @MrAquirier
    @MrAquirier 2 роки тому +2

    21:35 - мы ничего не ждём. Прекрасно, тогда зачем await для операции, которую запустил - забыл? Чтобы впустую потратить время на переключение контекста, дождавшись результата, ничего не сделать и вернуть поток обратно в пул?

  • @BonBiBon
    @BonBiBon 2 роки тому

    Очень понятно!

  • @hentaxxx
    @hentaxxx 2 роки тому

    С базой все понятно, но какой поток внутри самого асинхронного метода? новый с пула или тот что начал ожидание ?

  • @vagifk2864
    @vagifk2864 Рік тому

    Спасибо большое ! А почему используется Таск всегда с async? Разве это обязательно?

  • @user-eh9wy3gd8k
    @user-eh9wy3gd8k 3 роки тому

    Когда асинхронная операция выполнется долгое время и поток который начал выполнение ушел на другие задачи, кто и как сообщает о том, что длительная операция завершилась и ее нужно обработать, как это происходит?

  • @user-on5mh8zc5d
    @user-on5mh8zc5d 4 місяці тому

    Добрый день.
    Есть вопрос по изображению с асинхронной схемой.
    Есть пул потоков, в котором два потока.
    Поступил запрос на сервер и занял один из потоков.
    На время операции с БД этот поток возвращается в пул потоков.
    Но ведь для выполнения асинхронной операции с БД тоже нужен выделенный поток.
    Он находится не в том же пуле потоков? или пул потоков для обработки запросов веб-приложения и пул потоков доступных процессу это разные вещи?

  • @juliusmalkov9620
    @juliusmalkov9620 2 роки тому

    Вы же говорили, что не стоит делать методы возвращающие void асинхронными а в контроллере сделали

  • @zergzerg4844
    @zergzerg4844 3 роки тому

    Здравствуйте. Подскажите по таймингу 14:37 .
    public class HomeController : Controller
    {
    private readonly BookRepository bookRepository;
    public HomeController ( BookRepository bookRepository)
    { this.bookRepository = bookRepository; }
    }
    В чем разница между приватной переменной bookRepository и той что создается в конструкторе public HomeController ( BookRepository bookRepository) ? Ведь типа у них одинаковые , следовательно и приватная переменная должна иметь доступ к репзиторию, ?

    • @alekseev74
      @alekseev74  3 роки тому

      Этот подход называется Dependency Injection (Внедрение зависимостей). Погуглите, это больше концептуальный подход, чем технический. Так проще поддерживать код, тут просто пример очень простой в видео, поэтому BookRepository можно и явно объявить. Но так лучше не делать в реальных программах.

    • @zergzerg4844
      @zergzerg4844 3 роки тому +1

      @@alekseev74 Понял, спасибо большое за ответ и за ваши труды, щас почитаю.

  • @igorkurganov1976
    @igorkurganov1976 5 місяців тому

    А разве можно сделать асинхронно вначале получить из базы данные, долго пересчитывать на основе условий пришедших в запросе от юзера, а потом сохранить результат в базу.. Всё это долгие операции, но их невозможно запустить асинхронно!
    Получается, что их все три нужно вынести в отдельную функцию и уже именно её выполнять асинхронно? А тогда какой смысл делать её асинхронной, всё равно выполнения всех операций только последовательно (синхронно)?

  • @user-ir5vb7vv5e
    @user-ir5vb7vv5e 3 роки тому

    Это всё довольно просто. А как быть, если выполняемое действие настолько долгое, что я хочу при поступлении запроса запустить длительное действие и сразу вернуть код 204, чтобы клиент не ждал. Проблема в том, что в этом случае то самое длительное действие почему-то перестаёт работать. В моём случае это экспорт видео специальной библиотекой в файловую систему. В этом случае как быть??

    • @alekseev74
      @alekseev74  3 роки тому

      Как вариант можно запускать такие задачи как процессы в фоновом режиме. Погуглите про "asp.net core background task".

    • @user-ir5vb7vv5e
      @user-ir5vb7vv5e 3 роки тому

      @@alekseev74 Возможно, в Core с этим нет проблем, но мне надо это сделать в ASP.NET версия фреймворка 4.8

    • @user-ul7pm1tb5x
      @user-ul7pm1tb5x 3 роки тому +1

      @@user-ir5vb7vv5e Тут не важен фреймворк. Сам подход автор подсказывает абсолютно верный. Фоновые задачи можно реализовать хоть на таблице SQL и ее постоянном чтении с выгребанием этих задач, хоть на шине событий (что я считаю более правильным). Продолжать выполнение пользовательского потока уже после того, как будет возвращен ответ в корне неверно, такие реализации часто приводят к переполнению памяти, чрезмерной нагрузке по CPU на сервере с приложением и т.п. Ну и вообще подход в целом не очевидный.

  • @NN2592.
    @NN2592. Рік тому

    как вас найти в соц. сетях?

  • @Mr43046721
    @Mr43046721 2 роки тому

    А конечный автомат = машина состояний?

  • @user-nc7zt9rj9e
    @user-nc7zt9rj9e 2 роки тому

    Стесняюсь спросить. Вопрос может и не совсем по теме. Зачем на 14:44 минуте создаем конструктор для HomeController?

    • @alekseev74
      @alekseev74  2 роки тому

      Почитайте про тему "Внедрение зависимостей (Dependency Injection). Здесь просто код слишком простой.

    • @user-nc7zt9rj9e
      @user-nc7zt9rj9e 2 роки тому

      @@alekseev74 Спасибо 🙏 Прочту

  • @andrew-rk6ok
    @andrew-rk6ok Рік тому

    А когда новые видео?

  • @snake--
    @snake-- 2 роки тому

    Не совсем понятно как это происходит на низком уровне. Клиент переходит по ссылке, ему в этот момент выделяется поток. Мы переделываем методы на async, что в свою очередь заставляет поток вернуться обратно в пул. Но как тогда клиент остается в зависшем состоянии, пока await не вернется?

    • @alekseev74
      @alekseev74  2 роки тому +1

      Доброго дня. Да цели не стояло глубоко в вопрос залезть, максимально практично показал. Погуглите про брокеры сообщений типа RabbitMQ и т.д.

    • @snake--
      @snake-- 2 роки тому

      Относительно темы async/await вопросов нет, спасибо, все достаточно понятно. Будем гуглить.

    • @alekseev74
      @alekseev74  2 роки тому +1

      @@snake-- Про потоки - это уже вопрос архитектуры всей системы, не только морды в виде сайта.

  • @MrAquirier
    @MrAquirier 2 роки тому

    есть ещё пара важных моментов: мы возвращаем основной поток, который натыкается на await, обратно в пул. Окей. Но саму операцию-то кто выполняет при этом, которая завёрнута в конечный автомат? Background поток или китайцы педали крутят? Почему-то ни слова об этом не услышал, равно как про ConfigureAwait. Всё самое интересное так и осталось за кадром

    • @alekseev74
      @alekseev74  2 роки тому

      Доброго дня. Как вы хотите за 20 мин многопоточность и асинхронность рассказать. Для типовых решений вполне достаточно. Книги почитайте или консультации.

    • @MrAquirier
      @MrAquirier 2 роки тому

      @@alekseev74 да вообще не камень в Ваш огород, спасибо за видео, просто не услышал того, что хотел для себя услышать) По многопоточности видео должно быть вообще на несколько часов, понятное дело)

    • @alekseev74
      @alekseev74  2 роки тому +1

      @@MrAquirier Все ок) Смысл видео в том, что в asp.net чаще всего (не всегда) пиши async/await, ну и как это в entity framework реализовано. Кстати с момента записи видео .net core и ef core уже хорошо развились, работать одно удовольствие.

  • @hysapod
    @hysapod 2 роки тому

    Есть минусы у асинхронного выполнения? Ну т.е. почему тогда бы не писать вообще все асинхронно, я достаточно редко встречаю именно такое решение. Звучит так, будто это панацея и нужно постоянно это использовать.

    • @Dinarqka
      @Dinarqka 2 роки тому +1

      Само по себе асинхронное программирование отбирает много мощности машины, в сравнении с обычными методами, поэтому нужно понимать, когда необходимо использовать асин/авейт, потому что под капотом это создание нового потока (или даже процесса).
      К примеру - если у тебя есть кусок кода, где одно зависит от другого (получаешь из базы данных какую-то информацию, потом делаешь какие-то действия над данными и потом возвращаешь обратно), там асинхронка не будет нужна, потому что сначала нужно получить данные, а только потом делать какие-либо манипуляции, а вот если у тебя есть код, в котором нужно как можно быстрее что-то сделать и при этом ничего друг от друга не зависит (например - разные запросы в БД, то там можно создавать таски и уже асинхронно делать все это)

    • @hysapod
      @hysapod 2 роки тому

      @@Dinarqka Условно, если я прошу от БД какие -то данные без обработки, сразу выдавая их в исходном виде юзеру, то там лучше асинхронное?
      Вроде понял, спасибо

    • @Dinarqka
      @Dinarqka 2 роки тому

      @@hysapod ну вот если нужно, например, вернуть юзеру результат десяти обычных запросов , то да, юзеру не придется ждать, пока они выполнятся последовательно, он просто будет получать по мере выполнения тасок

  • @winstochurgle9133
    @winstochurgle9133 Рік тому

    Семен, ваша серия роликов по созданию MVC приложения всё еще актуальна? В целом. Просто даже мало иностранных контент-мейкеров делают такие обучающие видео. Разве что tutorialsEU.

    • @alekseev74
      @alekseev74  Рік тому +1

      В целом да, только конфиг немного изменился. Сейчас актуальна .net 6, уже 7ая на подходе. Пока нет времени перезаписать видео.

  • @zhdan5887
    @zhdan5887 3 роки тому

    Спасибо

  • @juniorcode41
    @juniorcode41 9 місяців тому

    Спасибо.

  • @user-xk3yp2nh1y
    @user-xk3yp2nh1y 2 роки тому

    Спасибо