чувствовал себя "продвинутым" первые пять минут, а потом мозг поплыл. сложно, но познавательно. То, что понял, информацией было полезной, спасибо за видос
@gaitavr19923 жыл бұрын
Имеет смысл вернуть потом и еще глянуть после некоторой практической работы
@PelipUnityDev2 жыл бұрын
@@gaitavr1992 Я так поступал со всеми видео по паттернам. Спасибо за видосы))
@alexeygolubev31043 жыл бұрын
До этого видоса даже не задумывался, что под капотом у async/await. Топчик, спасибо за видос !
@mimineko31003 жыл бұрын
да во всех этих фичах (таски, корутины), под капотом жуткие городули, способные сожрать системные ресурсы и память. Так что лучше многопоточности и старых добрых простых условных ветвлений, пока что ничего не придумали... Так же можно программно в апдейт любой набор делегатов помещать - убирать... Ну и свой класс таймера сделать.
@toxicknight30793 жыл бұрын
Круто, но сложна. Обязательно буду еще несколько раз пересматривать, может однажды все дойдет :)
@fumanchez3 жыл бұрын
дня 2 читаю про асинки, но это лучшее что я видел - и всего за 20 минут
@gaitavr19923 жыл бұрын
Я бы рекомендовал на практике использовать хотя-бы пару раз, теория выветривается быстро
@ve1c0m3 жыл бұрын
Читаю твои комменты, а в голове брутальный голос из видео))) Спасибо, очень ценная информация, много чего узнал.
@ИгорьСлепков-х3с Жыл бұрын
Спасибо. И ещё четыре слова.
@DmitryTimofeev_general3 жыл бұрын
Хороший видос. Мощную работу проделал.
@simxan123 Жыл бұрын
Очень круто и очень непонятно, ошибочно думал, что уже начал разбираться в C#.. Вы спустили маня с небес на Землю😀 Однозначно подписка и изучение контента, высший пилотаж!
@МихаилКрасаков-ж6ю3 жыл бұрын
Понял где то половину, наверное....) Очень интересно, спасибо!
@gaitavr19923 жыл бұрын
Когда понадобится свой эвейтер или случится странное поведение, то можно попробовать посмотреть еще раз)
@БАНДАРТ3 ай бұрын
круто! спасибо за видео. разобрался с асинхронными функциями!
@aynotation5202 Жыл бұрын
Не первый раз смотрю это видео, но если раньше это было просто под попкорн, и я тогда ничего так и не понял, то сейчас возникла именно необходимость в данном материале, и зашло на 10/10. Ни один из вопросов по асинкам не остался без ответа. Благодарю
@СветозарБоголюбов Жыл бұрын
Хз, в справочниках намного больше инфы. Но она вся вряд ли кому-то нужна, даже то, что здесь, не нужно большинству программистов Unity. Но стоит как минимум прочитать, чтобы иметь представление и все это не казалось магией в реальных примерах.
@inrage78716 ай бұрын
@@СветозарБоголюбов Подскажи такой справочник пожалуйста
@kirillsviderski47393 жыл бұрын
Самый тематичный посыл подписаться в истории Ютуба)
@JustPlayingBroGD3 жыл бұрын
Ты невероятно полезен!
@tech_jp160 Жыл бұрын
Впервые вижу блогера с такой глубиной знаний, спасибо!
@ell_pavel3 жыл бұрын
Хороший контент, буду ждать второй части!
@sergei-fil3 жыл бұрын
Ничего не понял, но очень интересно)) Шутка) Материал подан очень хорошо! Спасибо большое! Давно хочу разобраться с async/await и думаю это видео мне очень сильно в этом поможет, буду точно его пересматривать ещё несколько раз.
@avaloniuss8 ай бұрын
Круто рассказал!
@neitron293 жыл бұрын
очень недооцененный ролик - тема и ее разбор очень интересны! именно так и должно изучаться программирование - когда код разработчика осознаный! Спасибо большое - желаю роста каналу! лайк подписка)
@inskips3 жыл бұрын
Очень доходчиво. Спасибо за вашу работу. Каждый раз очень жду нового видео.
@MOQred3 жыл бұрын
Года 2 назад был бы такой видос, не было бы предела моей радости и задачу закрыл бы в срок xD Очень хорошо рассказано
@orik92423 жыл бұрын
Я от Сакутина. Очень благодарен ему за рекламу и тебе за познавательное видео.
@gaitavr19923 жыл бұрын
Я ему тоже благодарен, бустанул мне канал очень хорошо)
@kirill76373 жыл бұрын
Спасибо за отличное видео. Даже опытным разработчикам помогает освежить знания.
@АлександрПлотников-х8р3 жыл бұрын
Видео огонь 🔥 Узнал много нового
@andrey_consoles2 жыл бұрын
Спасибо за видео!
@СамвелСаруханян-ъ7к3 жыл бұрын
Сама тема классная, да и голос что надо. Чего мне реально не хватает, это дельных примеров (желательно простоватых), где это конкретно стоило бы применить. А так, спасибо, очень познавательно.
@gaitavr19923 жыл бұрын
Этот ролик про то, как работает изнутри, естественно он предполагает опыт использования тасок. В интернете куча примеров для новичков есть, в том числе рунете
@user-bn6bs9qk1z3 жыл бұрын
Круто, жду продолжения !
@gaitavr19923 жыл бұрын
На эту же тему?
@petrosaslanidis3 жыл бұрын
Спасибо . Как всегда на уровне
@АркадийШеховцов2 жыл бұрын
Спасибо, помогло в работе
@easycodeunity3d143 жыл бұрын
Кайф. Спасибо!
@vsevolodmetelsky12753 жыл бұрын
Отличное видео, спасибо.
@lkghost73 жыл бұрын
просто отлично
@KillerBestUselesmoun3 жыл бұрын
Крутая инфа с точки зрения понятий устройства async await методов внутри, но так как канал ориентирован на разработку на Unity, я ожидал увидеть практичное применение этих самых async await, рассмотреть отличия async await от корутин и как можно заменить эти самые корутины. Машина состояния - одновременно интересно и не понятно) особенно не понятно, где это можно применять)
@gaitavr19923 жыл бұрын
На базовом уровне там нечего применять, я хотел рассказать о внутренностях, так как это мало кто знает. Разработка на юнити ведется на шарпе и кто им не владеет хорошо - ничего не сможет сделать толкового
@gaitavr19923 жыл бұрын
И машину состояний сам никто не пишет, кроме кастомных эвейтеров. Зато знание принципа дает избежать различных проблем типа дедлока
@voltionboal93903 жыл бұрын
Спасибо, полезно но сложновато -нужна практика, очень мало такого рода контента особенно на русском ютубе, очень интересно и полезно про всякого рода способы оптимизации, продолжай в том же духе))
@skyjen55943 жыл бұрын
Я исполнил твою сихнронную операцию!
@SterinGM2 жыл бұрын
Под WebGL это будет работать? У меня не получилось завести ((
@eyellen Жыл бұрын
Очень интересно, хотелось бы спросить, а где можно найти все эти тонкости языка ? А то я прошелся по возможностям языка, но теперь интересно как оно устроено внутри, хочется узнать все тонкости и детали, может есть какая-то книга ? Или где вообще можно найти об этом ?
@stanislavsh65823 жыл бұрын
Хех, помню времена когда TPL не было. Хорошо, что те времена уже в прошлом. Не то чтобы я такой старый, просто шарп начал ковырять еще в школе.
@andrewmad3 жыл бұрын
Круто, Макс!
@aa-ly9on3 жыл бұрын
Спасибо
@mprils3 жыл бұрын
Хорошее видео, спасибо Однако Стоило рассказать как не нужно делать чтобы не получить дедлок А также, что цена этого всего удобства - аллокация памяти И если в обычном .нет вне юнити - это терпимо, то у юнити довольно печальный GC Поэтому что-то там поэвейтить в UI - это нормально, а вот создавать таски направо и налево в игровой логике - так себе идея
@gaitavr19923 жыл бұрын
Примеров дедлоков куча в интернете, я не хотел еще затягивать и без того сложное видео. А про выделение памяти все сказано
@alexsklyarov67923 жыл бұрын
Круто, еще б примеры где лучше применять async, а где IEnumerator, спасибо.
@gaitavr19923 жыл бұрын
Так это разные вещи в плане применения. Async нужен для асинхронного выполнения метода. Ienumerator это перебор коллекции
@alexsklyarov67923 жыл бұрын
@@gaitavr1992 я возможно не совсем понял ответ, но я имел ввиду когда используют coroutine и в методе есть такой код: yield return new WaitForSeconds(time), зарание спасибо)
@gaitavr19923 жыл бұрын
Ну корутина только с gameobject работает и всегда в одном потоке. Async работает везде и можно настроить потоки. Для легких вещей корутина ок
@seldemirov3 жыл бұрын
@@gaitavr1992 Насколько я понимаю, async включает в себя весь функционал корутины и привыкнув к нему можно от корутин отказаться. Так ли это? Или есть случаи где так просто замену провести не получится?
@gaitavr19923 жыл бұрын
Корутина легче таски, иногда это критично. Плюс ожидание кадра и подобные юнити вещи заменить сложно
@Bushido_Cat6 ай бұрын
подскажи плис где можно почитать по подробнее по тому что ты показал?
@ПростоЧеловек-р1з3 жыл бұрын
коментарий оставил. остальное сделал сразу перед видео, поэтому чтобы продолжить асинк или авейт?
@justlama03 жыл бұрын
Годнота)
@ilyanazarov70013 жыл бұрын
Спасибо за видео! Запустил у себя ваш кастомный awaiter, но обнаружил, что второй await также срабатывает при повторном нажатии button1. Результат при этом выводит такой же, как и при последовательном нажатии button1 и button2. Почему так?
@rdragon5873 жыл бұрын
Cool) thanks
@NoldoWalker3 жыл бұрын
Очень мощно, недавно начал сам изучать эту тему, а тут удачно подъехал видос. Я правильно понимаю, что объяснение про машину состояний - это про то что под капотом у асинк-авейта и в целом можно и без знания этого им пользоваться? Просто в этом месте я понимание потерял. Upd. Из примера про кнопку понял что только с базовыми типами. Надо будет довкурить, чтобы делать камтомные авейтеры на все подряд.
@gaitavr19923 жыл бұрын
Все верно, стейт машина+эвейтер+каркасный метод и будет работать без async await
@NoldoWalker3 жыл бұрын
@@gaitavr1992 спасибо
@AlexPlayer10003 жыл бұрын
Было бы здорово в будущем увидеть уроки по UniRX сейчас на работе только их и используем
@ruslan_yefimov3 жыл бұрын
Такой чёрной магии я не видел с тех пор, как пытался писать шейдеры..
@timurakhmetov57253 жыл бұрын
Максим, спасибо за видео. У меня вопрос: где выполняется таска, которую мы await'им. Вот у нас есть асинхронный метод, мы его вызываем, он выполняется до первого await, в await у нас таска, выполняющая длительную операцию. после await управление возвращается, основной поток не блокируется, и выполняет другие операции. Но где выполняется таска: в основном потоке параллельно (хотя насколько я помню, поток может выполнять только 1 задачу), в другом потоке, берется он из пула и т.д.? И как с этим всем связана машина состояний?
@gaitavr19923 жыл бұрын
Лучше еще раз посмотреть видео, особенно момент с самописными эвейтерами
@TheTalionn3 жыл бұрын
А можно 1-2 примера, когда стоит все таки отправлять Task в отдельный поток?
@gaitavr19923 жыл бұрын
Я делаю это при первой возможности, чтобы разгрузить главный и если я не работаю с юнити типами (gameobject, texture и тд)
@TheTalionn3 жыл бұрын
@@gaitavr1992 спасибо
@Nik0lay112 жыл бұрын
Если есть таска t и у нее есть ContinueWith то нужно ли делать после ее создания await t - а то в видео говорится что авейтить целую конструкцию не получится(либо одно либо другое) но автор добавляет код "await t;"? Если авейт нужен то после него может быть еще код и другие авейты(которые отработают после ContinueWith?)? Если не нужен то как обработается ексепшн если он выбросится в ContinueWith?
@alexspeleers3 жыл бұрын
видел на каком-то буржуйском канале про стейт машину в асинк авейте, но там о билдерах/диспоузах ничё не говорили, как же хорошо что это всё под капотом и не надо гемороится. А кста разве оно не в IL код компилится, или вот тот С# код со свичами ты чисто для наглядности бахнул?
@gaitavr19923 жыл бұрын
Это до IL кода, все await и async преобразуются в стейт машины и эвейтеры
@МаксимВорошилов-о9о2 жыл бұрын
Await'ы, как я понял, лишь маркеры для компилятора, показывающие, как разбивать метод. Что будет, если между await'ами поставить goto? Например, {Label: await Task.Wait(1000); goto Label;} будет всего лишь бесконечный переход на состояние 1? Или такой подход может прям сломать async/await?
@gaitavr19922 жыл бұрын
Мне такое никогда не пришлось бы попробовать. Я не использую goto в принципе, а вот в async/await он используется
@МаксимВорошилов-о9о2 жыл бұрын
@@gaitavr1992 а я все же проверил. Ничего не сломалось. Видимо, бесконечный переход на состояние 1
@nonamenoname58243 жыл бұрын
Good
@staskapanin3 жыл бұрын
Максим, что думаете по поводу последних двух абзацев(Avoid using async and await) из этой страницы документации Unity? docs.unity3d.com/Manual/overview-of-dot-net-in-unity.html Контекст синхронизации Unity всё равно заставляет работать всё в главном потоке и нужно использовать контекст по умолчанию или свой? Одинаково ли работает async/await в .NET и в Unity IL2CPP(на разных платформах, например UWP)?
@gaitavr19923 жыл бұрын
Таски генерируют много мусора, что критично в узких горлышках(по ситуации смотрят). Если не указать какой синхронизационный контекст использовать, то все выполнится в том же потоке и проблем с unity типами не будет. А вот если эти типы не использовать, и не выполнять работу в том же контексте, то будет работать быстрее.
@gaitavr19923 жыл бұрын
С uwp работал очень давно, когда еще таски не знал, сложно сказать. Ставлю на то, что будет работать
@ОлегШинкаренко-х6в3 жыл бұрын
хорошее видео, спасибо..можно сделать такое же, но про корутины ? как они под капотом работают и потом их сравнение с async/await
@gaitavr19923 жыл бұрын
Как-нибудь дойдем
@АльбертАвагян-м9т3 жыл бұрын
Спасибо большое за видео. Очень интересно если бы ты рассказал про многопоточность в юнити. Например как работают корутины, в одном потоке ли работает юнити и если да, то по какой очередности запускаются скрипты? Спасибо еще раз
@gaitavr19923 жыл бұрын
Судя по тому, что вы написали, присутствует сильная путаница. В рамках c# роликов сниму
@GaniSo Жыл бұрын
жалко что у тебя перестали выходит видео (
@modjaid39073 жыл бұрын
а в юнити требуется использование тасков и асинхронных методов? Вроде же все решают курутины
@gaitavr19923 жыл бұрын
Это один из инструментов, требоваться может только в том случае, если команда повсеместно его использует. Но скажу сразу, что если проект не очень стеснен в производительности , то там будет или UniRX или Task
@peterpashchenko3012 жыл бұрын
Круто. очень advanced, но увы весьма сложно для понимания. Кроме разных вариантов применения класса Task.
@tr0sty3 жыл бұрын
есть ли способ килять все асинхронные процессы, запущенные в коде, при выходе из play mode в эдиторе?
@gaitavr19923 жыл бұрын
Я бы cancellation token использовал. Также при рекомпиляции таски очистятся
@grinde_wald68883 жыл бұрын
Здравствуйте, могли бы вы рассказать как можно сделать меню паузы с остановкой игры, но чтобы при этом анимация и Particle system работали нормально. Заранее спасибо. И большое спасибо за познавательный контент.
@greemdim46113 жыл бұрын
А как вы смотрите на то, чтобы создать плейлист по сишарпу на юнити для людей, которые знают только основы обычного сишарпа?
@gaitavr19923 жыл бұрын
Если человек знает обычный шарп - у него нет проблем в юнити с этим)
@greemdim46113 жыл бұрын
@@gaitavr1992 ну, я вот например знаю основы, то есть переменные, циклы, условия, массивы и так далее. Но при этом программировать на юнити я не могу, там же сишарп другой по идее
@gaitavr19923 жыл бұрын
7й си шарп, вам нужно несколько вводных уроков пройти для начинающих, так как у меня контент ориентирован на повышение квалификации разработчиков junior +
@ВладимирКосмодемьянский-ф6м3 жыл бұрын
На слух очень сложно понять, вот бы код посмотреть
@alexspeleers3 жыл бұрын
бекгрануд в паверпоинте - юзал в универе на каких-то презентациях (((:
@polarbar7806 ай бұрын
Вижу, что ролик общеобучающий. В этой ситуации объяснять различие между асинхронным программированием и многопоточностью в начале неправильно. Это сбивает людей с толку. Разумно сосредоточится на самом механизме,принципе его работы, а само различие объяснить в конце. Тем более,что это различие не касается самого механизма. Я могу с помощью async-await запустить две параллельные задачи, которые будут выполняться на CPU и это не какой-то крайней случай, а вполне распространенная практика. Да и сам термин "асинхронность" но никак не связан с CPU, скорее он означает процессы, выполняющиеся независимо друг от друга. Поэтому, есть ли разница в какой среде происходит это выполнение (на разных устройствах или одном cpu)? На мой взгляд нет. Всё твердят как догму "асинхронность не равно многопоточность", а я скажу, что в ряде случаев равно 😅 И что, я буду не прав?
@ViATVmy3 жыл бұрын
Спасибо если можно и про
@gaitavr19923 жыл бұрын
Про что?
@Gekker423 жыл бұрын
@@gaitavr1992 походу он OperationCanceledException получил пока писал, а отправка сообщения уровнем выше стояла
@vasyalapuh28783 жыл бұрын
Самое время написать что сложно с наскока понять.
@vasyalapuh28783 жыл бұрын
Я понял что ничего не понял. Требуэ пересмотр.
@andrew_t8003 жыл бұрын
Нрмас. Я не ожидал описания того что происходит "внутри". Много "кривой" инфы у других авторов - иногда прям бесит. Запили видос про потоки! Как и когда использовать, ато у меня весь проект изначально на корутинах, а вот выделили время на рефактор, но я в Юнити не силён в потоках - очень не хочется "перемудрить".
@gaitavr19923 жыл бұрын
Дойдем и до потоков
@addmusic14843 жыл бұрын
Люди у вас тоже ошибка: async не поддерживается 2.3 версии
@_EnVyUs3 жыл бұрын
когда узнаешь внутренности функций или какой либо логики в языке программирование, это пугает и ты отказываешься от использования этих возможностей :\
@gaitavr19923 жыл бұрын
Не надо так)
@saasrus2 жыл бұрын
Инфа очень плотная, это видос не на один раз, несмотря на небольшой хронометраж.
@malvislightfadynightgames29253 жыл бұрын
Так и не была раскрыта явная разница между многопоточностью и асинхронностью. На том же metanit объясняется лучше
@ilyakruglow64863 жыл бұрын
я думал асинк не работает с монобехами
@igorcoolman Жыл бұрын
первые 5 минут понятно, потом ересь какая-то
@Andrei_Kozlov2 жыл бұрын
При объяснении не хватает примеров в играх... по этому полное непонимание
@coolrash2 жыл бұрын
Нахрен мне этот async, если я никак не могу с ним взаимодейстовавать с игрой? Ну для вычисление всяких формул пойдет, но мне надо нормальный многопоточность и с нормальным доступом с основным потоком. А то там все нельзя ничего взять присвоимть. Вообще ничего нельзя. Только вычисление координаты х и то как это возвращать - тайна века. Кароче много поточность в юнити сосет
@gaitavr19922 жыл бұрын
Что за высер?
@coolrash2 жыл бұрын
@@gaitavr1992 я пытался генерировать коллайдер в реальном времени, изза этого в игре были фризы достаточно много кадров, что очень портило игру. Я хотел это в фоне обработать и передать в основной поток. Но как я понял, в юнити нету многопоточности с основным игровым потоком. Только эти координаты можно обработаьь и васё. А так тогда был излишне эмоционален, так как 1 месяц потратил на эту затею и не смог решить эту проблему.
@malvislightfadynightgames29253 жыл бұрын
Опять цвета одинаковые. Как это понимать. Если бы цвета значимых типов и ссылочных типов были разные, то тебе не пришлось бы объяснять, что AsyncVoidMethodBuilder это структура. Не подумай, что я придираюсь, я просто хочу сделать из твоих шикарных знаний в виде видеоуроков ещё и удобную интерпретацию для впитывания этих знаний.