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

  Рет қаралды 31,896

Семен Алексеев | Программирование

Семен Алексеев | Программирование

Күн бұрын

Пікірлер: 75
@gennadiigorbunov1027
@gennadiigorbunov1027 4 жыл бұрын
Огромное спасибо вам за уроки ASP Core, стал лучше понимать! Очень жду новых!
@ivankarash2646
@ivankarash2646 2 жыл бұрын
Спасибо за труд, единственный урок где действительно стало понятно как работает асинхронка.
@ГеоргийБарышников-п7т
@ГеоргийБарышников-п7т 2 жыл бұрын
Спасибо большое за ваши ролики всё очень доступно и понятно! С нетерпением жду новых роликов!
@bilamalva
@bilamalva 3 жыл бұрын
Наконец-то пришло понимание асинхронности. Спасибо огромное за урок!
@DjonNIK777
@DjonNIK777 Жыл бұрын
На 10:55 идет речь о суффиксе Async для асинхронных методов. Раньше действительно такая рекомендация встречалась в msdn, но сейчас уже почти все асинхронное и скорее нужен суффикс Sync )) Так что лучше это решать на уровне договоренности по стилю кода в команде
@Tera-h7e
@Tera-h7e Ай бұрын
Сложные расчеты, которые нагружают ЦП, они самые CPU Bounds, лучше не асинхронно выполнять, а в других потоках. Так быстрее будет, ведь асинхронный код != многопоточность или многозадачность. И обычно, во всяких приложениях с UI или игровых движках всё выполняется в одном потоке, то есть асинхронный код будет выполняться в одном и том же потоке, можешь проверить, например, в Windows Forms или WPF, или на движке Unity.
@Tera-h7e
@Tera-h7e Ай бұрын
У класса таск есть удобный статический метод Run, который выделяет ОТДЕЛЬНЫЙ поток для метода, который мы передаем Task.Run(() => );
@Индахаус
@Индахаус 2 жыл бұрын
Отличная работа, наконец то прочувствовал с более глубоким пониманием работу этих операторов. Подписался
@coffeine_addict
@coffeine_addict 2 жыл бұрын
Определенно лучшее объяснение из тех, что я видела. Для новичков - идеально!
@Mr43046721
@Mr43046721 2 жыл бұрын
Огромное спасибо за видео, наконец-то дошло то, что так часто спрашивают на собеседованиях. Стал чуть умнее :)
@hearyourmood9633
@hearyourmood9633 3 жыл бұрын
отлично объясняешь , было бы круто послушать твое объяснение разницы между многопоточностью и асинхронностью
@НаташаТаташа
@НаташаТаташа 3 жыл бұрын
Спасибо за доступный видеоурок!
@romanfersion6006
@romanfersion6006 4 жыл бұрын
сделай пожалуйста видео по "Dependency injection"
@АлександрГригоренко-г8к
@АлександрГригоренко-г8к 4 жыл бұрын
Спасибо за труд. Было очень интересно послушать начинающему.
@salamatturdukhodzhaev3894
@salamatturdukhodzhaev3894 3 жыл бұрын
Семен, Спасибо! Все четко и ясно.
@MrAquirier
@MrAquirier 2 жыл бұрын
21:35 - мы ничего не ждём. Прекрасно, тогда зачем await для операции, которую запустил - забыл? Чтобы впустую потратить время на переключение контекста, дождавшись результата, ничего не сделать и вернуть поток обратно в пул?
@orhanaliyev9774
@orhanaliyev9774 4 ай бұрын
Блин чувак асинхроность это необязательно новый поток ))
@kulivers1998
@kulivers1998 3 жыл бұрын
Очень хорошее объяснение, спасибо!
@ЮрийТомчук-х7ю
@ЮрийТомчук-х7ю 4 жыл бұрын
Все класно и доходчиво расказано. Можеш сделать видео по многопоточности?
@minimalstory
@minimalstory 2 жыл бұрын
Все очень понятно. Спасибо.
@ramil9209
@ramil9209 3 жыл бұрын
Очень круто, спасибо
@siarheisamusik416
@siarheisamusik416 4 жыл бұрын
То, что нужно. Спасибо.
@ЖуковДмитрий-ш8щ
@ЖуковДмитрий-ш8щ 2 жыл бұрын
Огонь!
@juliusmalkov9620
@juliusmalkov9620 2 жыл бұрын
Вы же говорили, что не стоит делать методы возвращающие void асинхронными а в контроллере сделали
@vagifk2864
@vagifk2864 Жыл бұрын
Спасибо большое ! А почему используется Таск всегда с async? Разве это обязательно?
@codemystery
@codemystery 3 жыл бұрын
шик, спасибо
@ТуралИскендерли
@ТуралИскендерли 3 жыл бұрын
Стесняюсь спросить. Вопрос может и не совсем по теме. Зачем на 14:44 минуте создаем конструктор для HomeController?
@alekseev74
@alekseev74 3 жыл бұрын
Почитайте про тему "Внедрение зависимостей (Dependency Injection). Здесь просто код слишком простой.
@ТуралИскендерли
@ТуралИскендерли 3 жыл бұрын
@@alekseev74 Спасибо 🙏 Прочту
@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 жыл бұрын
@@alekseev74 Понял, спасибо большое за ответ и за ваши труды, щас почитаю.
@AndreyO_777
@AndreyO_777 3 жыл бұрын
спасибо большое
@trashtalk450
@trashtalk450 4 жыл бұрын
Спасибо!
@igorkurganov1976
@igorkurganov1976 11 ай бұрын
А разве можно сделать асинхронно вначале получить из базы данные, долго пересчитывать на основе условий пришедших в запросе от юзера, а потом сохранить результат в базу.. Всё это долгие операции, но их невозможно запустить асинхронно! Получается, что их все три нужно вынести в отдельную функцию и уже именно её выполнять асинхронно? А тогда какой смысл делать её асинхронной, всё равно выполнения всех операций только последовательно (синхронно)?
@err0rgorinichvisuals498
@err0rgorinichvisuals498 2 жыл бұрын
Очень крутое видео и в принципе помогло решить кучу вопросов) знаю что ответ можно ждать долго, но всё же есть вопрос, если созданы асинхронные методы, в синхронных больше нет нужды в проекте?
@Tera-h7e
@Tera-h7e Ай бұрын
Если это не запросы или ожидания, то да
@Дмитрийм-л7ф
@Дмитрийм-л7ф 4 жыл бұрын
Спасибо.
@АлексСандр-щ8л
@АлексСандр-щ8л 10 ай бұрын
Добрый день. Есть вопрос по изображению с асинхронной схемой. Есть пул потоков, в котором два потока. Поступил запрос на сервер и занял один из потоков. На время операции с БД этот поток возвращается в пул потоков. Но ведь для выполнения асинхронной операции с БД тоже нужен выделенный поток. Он находится не в том же пуле потоков? или пул потоков для обработки запросов веб-приложения и пул потоков доступных процессу это разные вещи?
@sandback122
@sandback122 3 ай бұрын
да, вы правы. Освобождается поток, который вызвал асинхронный метод, а для выполнения вызванного метода берется поток из thread pool, автор напутал по всей видимости
@Tera-h7e
@Tera-h7e Ай бұрын
​@@sandback122то есть ожидание или запрос будет обрабатывать другой свободный поток из пула потоков? А наш главный поток освободится для других задач нашей программы? И как тот поток получит результат, планировщик задач оповестит наш главный поток, чтобы он вернулся к тому методу и продолжил выполнение?
@NN2592.
@NN2592. 2 жыл бұрын
как вас найти в соц. сетях?
@ДмитрийПанаськов-о8у
@ДмитрийПанаськов-о8у 3 жыл бұрын
Когда асинхронная операция выполнется долгое время и поток который начал выполнение ушел на другие задачи, кто и как сообщает о том, что длительная операция завершилась и ее нужно обработать, как это происходит?
@Tera-h7e
@Tera-h7e Ай бұрын
Планировщик задач отвечает, когда вернутся в этому методу
@MrAquirier
@MrAquirier 2 жыл бұрын
есть ещё пара важных моментов: мы возвращаем основной поток, который натыкается на await, обратно в пул. Окей. Но саму операцию-то кто выполняет при этом, которая завёрнута в конечный автомат? Background поток или китайцы педали крутят? Почему-то ни слова об этом не услышал, равно как про ConfigureAwait. Всё самое интересное так и осталось за кадром
@alekseev74
@alekseev74 2 жыл бұрын
Доброго дня. Как вы хотите за 20 мин многопоточность и асинхронность рассказать. Для типовых решений вполне достаточно. Книги почитайте или консультации.
@MrAquirier
@MrAquirier 2 жыл бұрын
@@alekseev74 да вообще не камень в Ваш огород, спасибо за видео, просто не услышал того, что хотел для себя услышать) По многопоточности видео должно быть вообще на несколько часов, понятное дело)
@alekseev74
@alekseev74 2 жыл бұрын
@@MrAquirier Все ок) Смысл видео в том, что в asp.net чаще всего (не всегда) пиши async/await, ну и как это в entity framework реализовано. Кстати с момента записи видео .net core и ef core уже хорошо развились, работать одно удовольствие.
@Tera-h7e
@Tera-h7e Ай бұрын
Операционная система выполняет операцию, ей доступно очень много потоков процессора, она там стоит в очереди на обработку, по-моему так, когда получает результат, то планировщик задач оповещает главный поток, который запустил наш асинхронный метод, вернутся и продолжить код в том методе
@Mr43046721
@Mr43046721 2 жыл бұрын
А конечный автомат = машина состояний?
@ЯкушевАлександр-я2т
@ЯкушевАлександр-я2т 2 жыл бұрын
Кайф, просто и доступно, благодарю.
@andrew-rk6ok
@andrew-rk6ok 2 жыл бұрын
А когда новые видео?
@snake--
@snake-- 3 жыл бұрын
Не совсем понятно как это происходит на низком уровне. Клиент переходит по ссылке, ему в этот момент выделяется поток. Мы переделываем методы на async, что в свою очередь заставляет поток вернуться обратно в пул. Но как тогда клиент остается в зависшем состоянии, пока await не вернется?
@alekseev74
@alekseev74 3 жыл бұрын
Доброго дня. Да цели не стояло глубоко в вопрос залезть, максимально практично показал. Погуглите про брокеры сообщений типа RabbitMQ и т.д.
@snake--
@snake-- 3 жыл бұрын
Относительно темы async/await вопросов нет, спасибо, все достаточно понятно. Будем гуглить.
@alekseev74
@alekseev74 3 жыл бұрын
@@snake-- Про потоки - это уже вопрос архитектуры всей системы, не только морды в виде сайта.
@hysapod
@hysapod 2 жыл бұрын
Есть минусы у асинхронного выполнения? Ну т.е. почему тогда бы не писать вообще все асинхронно, я достаточно редко встречаю именно такое решение. Звучит так, будто это панацея и нужно постоянно это использовать.
@Dinarqka
@Dinarqka 2 жыл бұрын
Само по себе асинхронное программирование отбирает много мощности машины, в сравнении с обычными методами, поэтому нужно понимать, когда необходимо использовать асин/авейт, потому что под капотом это создание нового потока (или даже процесса). К примеру - если у тебя есть кусок кода, где одно зависит от другого (получаешь из базы данных какую-то информацию, потом делаешь какие-то действия над данными и потом возвращаешь обратно), там асинхронка не будет нужна, потому что сначала нужно получить данные, а только потом делать какие-либо манипуляции, а вот если у тебя есть код, в котором нужно как можно быстрее что-то сделать и при этом ничего друг от друга не зависит (например - разные запросы в БД, то там можно создавать таски и уже асинхронно делать все это)
@hysapod
@hysapod 2 жыл бұрын
@@Dinarqka Условно, если я прошу от БД какие -то данные без обработки, сразу выдавая их в исходном виде юзеру, то там лучше асинхронное? Вроде понял, спасибо
@Dinarqka
@Dinarqka 2 жыл бұрын
@@hysapod ну вот если нужно, например, вернуть юзеру результат десяти обычных запросов , то да, юзеру не придется ждать, пока они выполнятся последовательно, он просто будет получать по мере выполнения тасок
@АлександрБабаев-п2й
@АлександрБабаев-п2й 4 жыл бұрын
Это всё довольно просто. А как быть, если выполняемое действие настолько долгое, что я хочу при поступлении запроса запустить длительное действие и сразу вернуть код 204, чтобы клиент не ждал. Проблема в том, что в этом случае то самое длительное действие почему-то перестаёт работать. В моём случае это экспорт видео специальной библиотекой в файловую систему. В этом случае как быть??
@alekseev74
@alekseev74 4 жыл бұрын
Как вариант можно запускать такие задачи как процессы в фоновом режиме. Погуглите про "asp.net core background task".
@АлександрБабаев-п2й
@АлександрБабаев-п2й 4 жыл бұрын
@@alekseev74 Возможно, в Core с этим нет проблем, но мне надо это сделать в ASP.NET версия фреймворка 4.8
@МаксимВеснин-и6э
@МаксимВеснин-и6э 4 жыл бұрын
@@АлександрБабаев-п2й Тут не важен фреймворк. Сам подход автор подсказывает абсолютно верный. Фоновые задачи можно реализовать хоть на таблице SQL и ее постоянном чтении с выгребанием этих задач, хоть на шине событий (что я считаю более правильным). Продолжать выполнение пользовательского потока уже после того, как будет возвращен ответ в корне неверно, такие реализации часто приводят к переполнению памяти, чрезмерной нагрузке по CPU на сервере с приложением и т.п. Ну и вообще подход в целом не очевидный.
@winstochurgle9133
@winstochurgle9133 2 жыл бұрын
Семен, ваша серия роликов по созданию MVC приложения всё еще актуальна? В целом. Просто даже мало иностранных контент-мейкеров делают такие обучающие видео. Разве что tutorialsEU.
@alekseev74
@alekseev74 2 жыл бұрын
В целом да, только конфиг немного изменился. Сейчас актуальна .net 6, уже 7ая на подходе. Пока нет времени перезаписать видео.
@BonBiBon
@BonBiBon 3 жыл бұрын
Очень понятно!
@Дима-г9х6п
@Дима-г9х6п 4 жыл бұрын
Спасибо
@zhdan5887
@zhdan5887 4 жыл бұрын
Спасибо
@НаталияСтоян-э6м
@НаталияСтоян-э6м 2 жыл бұрын
Спасибо
@juniorcode41
@juniorcode41 Жыл бұрын
Спасибо.
Мен атып көрмегенмін ! | Qalam | 5 серия
25:41
Quando A Diferença De Altura É Muito Grande 😲😂
00:12
Mari Maria
Рет қаралды 45 МЛН
JavaScript событийный цикл Event Loop, асинхронный код, промисы (Promise), async / await
24:03
Асинхронное программирование на C# (блок 1)
1:01:53
Просто программист
Рет қаралды 9 М.
Полная дорожная карта C# разработчика на платформе .NET
42:40
Александр Алексеев | Папочка Дотнета
Рет қаралды 2,9 М.
Андрей Часовских - Async/await: собираем грабли
48:19
DotNext — конференция для .NET‑разработчиков
Рет қаралды 48 М.
That's NOT How Async And Await Works in .NET!
12:25
Codewrinkles
Рет қаралды 28 М.
Марк Шевченко - Микросервисы на C#
1:02:10
Мен атып көрмегенмін ! | Qalam | 5 серия
25:41