Асинхронное программирование в C# и Unity3D для продвинутых

  Рет қаралды 35,469

Максим Крюков

Максим Крюков

Күн бұрын

В этом видео мы углубимся в async/await. Узнаем, почему асинхронность не равно много поточность, как устроен await внутри и как его применить к любому типу.
Ссылка на Discord - / discord
Делегаты и события - • Делегаты и события в u...
LINQ и свой итератор - • LINQ в C#. Продвинутое...
Расширяющие методы - • Что такое методы расши...
Паблик игроделов - special3d
"00:00 - Введение"
"01:40 - Первый пример"
"03:55 - Синтаксис и условия компиляции"
"05:51 - Машина состояний"
"14:17 - Свой awaiter"
"16:24 - Полезные методы"
Поддержка канала:
Patreon - www.patreon.com/user?u=32502669
В крипте:
BTC - 16WmTb4VTFGYrwEjjnMKNNMMzsMB1rPEqD
ETH - 0x8d35406f8317b846528d0a9ea4a34ce59968dff2
XRP - rLW9gnQo7BQhU6igk5keqYnH3TVrCxGRzm (TAG - 1438215071)
LTC- MNSWdzdVsUMnozSU5HhUPEscfxaUK3Fdck
#unity3d #await #async #gamedev #ityoutubersru

Пікірлер: 130
@Gekker42
@Gekker42 3 жыл бұрын
чувствовал себя "продвинутым" первые пять минут, а потом мозг поплыл. сложно, но познавательно. То, что понял, информацией было полезной, спасибо за видос
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Имеет смысл вернуть потом и еще глянуть после некоторой практической работы
@PelipUnityDev
@PelipUnityDev 2 жыл бұрын
@@gaitavr1992 Я так поступал со всеми видео по паттернам. Спасибо за видосы))
@alexeygolubev3104
@alexeygolubev3104 3 жыл бұрын
До этого видоса даже не задумывался, что под капотом у async/await. Топчик, спасибо за видос !
@mimineko3100
@mimineko3100 3 жыл бұрын
да во всех этих фичах (таски, корутины), под капотом жуткие городули, способные сожрать системные ресурсы и память. Так что лучше многопоточности и старых добрых простых условных ветвлений, пока что ничего не придумали... Так же можно программно в апдейт любой набор делегатов помещать - убирать... Ну и свой класс таймера сделать.
@toxicknight3079
@toxicknight3079 3 жыл бұрын
Круто, но сложна. Обязательно буду еще несколько раз пересматривать, может однажды все дойдет :)
@fumanchez
@fumanchez 3 жыл бұрын
дня 2 читаю про асинки, но это лучшее что я видел - и всего за 20 минут
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Я бы рекомендовал на практике использовать хотя-бы пару раз, теория выветривается быстро
@inskips
@inskips 3 жыл бұрын
Очень доходчиво. Спасибо за вашу работу. Каждый раз очень жду нового видео.
@ell_pavel
@ell_pavel 2 жыл бұрын
Хороший контент, буду ждать второй части!
@JustPlayingBroGD
@JustPlayingBroGD 3 жыл бұрын
Ты невероятно полезен!
@kirill7637
@kirill7637 3 жыл бұрын
Спасибо за отличное видео. Даже опытным разработчикам помогает освежить знания.
@kirillsviderski4739
@kirillsviderski4739 3 жыл бұрын
Самый тематичный посыл подписаться в истории Ютуба)
@DmitryTimofeev_general
@DmitryTimofeev_general 3 жыл бұрын
Хороший видос. Мощную работу проделал.
@ve1c0m
@ve1c0m 3 жыл бұрын
Читаю твои комменты, а в голове брутальный голос из видео))) Спасибо, очень ценная информация, много чего узнал.
@user-vt9bh6fu4g
@user-vt9bh6fu4g 3 жыл бұрын
Спасибо за годный контент!)
@simxan123
@simxan123 Жыл бұрын
Очень круто и очень непонятно, ошибочно думал, что уже начал разбираться в C#.. Вы спустили маня с небес на Землю😀 Однозначно подписка и изучение контента, высший пилотаж!
@petrosaslanidis
@petrosaslanidis 3 жыл бұрын
Спасибо . Как всегда на уровне
@neitron29
@neitron29 3 жыл бұрын
очень недооцененный ролик - тема и ее разбор очень интересны! именно так и должно изучаться программирование - когда код разработчика осознаный! Спасибо большое - желаю роста каналу! лайк подписка)
@user-lg5se3nj1e
@user-lg5se3nj1e 3 жыл бұрын
Видео огонь 🔥 Узнал много нового
@tech_jp160
@tech_jp160 Жыл бұрын
Впервые вижу блогера с такой глубиной знаний, спасибо!
@user-nv6gj6hg2s
@user-nv6gj6hg2s Жыл бұрын
Спасибо, было познавательно!
@sergei-fil
@sergei-fil 3 жыл бұрын
Ничего не понял, но очень интересно)) Шутка) Материал подан очень хорошо! Спасибо большое! Давно хочу разобраться с async/await и думаю это видео мне очень сильно в этом поможет, буду точно его пересматривать ещё несколько раз.
@MOQred
@MOQred 3 жыл бұрын
Года 2 назад был бы такой видос, не было бы предела моей радости и задачу закрыл бы в срок xD Очень хорошо рассказано
@vsevolodmetelsky1275
@vsevolodmetelsky1275 3 жыл бұрын
Отличное видео, спасибо.
@user-pd9eq4dq7n
@user-pd9eq4dq7n 3 жыл бұрын
Понял где то половину, наверное....) Очень интересно, спасибо!
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Когда понадобится свой эвейтер или случится странное поведение, то можно попробовать посмотреть еще раз)
@user-zf8wh5pn6i
@user-zf8wh5pn6i 7 ай бұрын
Спасибо за видео!
@andrewmad
@andrewmad 3 жыл бұрын
Круто, Макс!
@user-bn6bs9qk1z
@user-bn6bs9qk1z 3 жыл бұрын
Круто, жду продолжения !
@gaitavr1992
@gaitavr1992 3 жыл бұрын
На эту же тему?
@voltionboal9390
@voltionboal9390 3 жыл бұрын
Спасибо, полезно но сложновато -нужна практика, очень мало такого рода контента особенно на русском ютубе, очень интересно и полезно про всякого рода способы оптимизации, продолжай в том же духе))
@avaloniuss
@avaloniuss 3 ай бұрын
Круто рассказал!
@user-hk7qf9wl1m
@user-hk7qf9wl1m 10 ай бұрын
Спасибо. И ещё четыре слова.
@user-hn3lf4nx8o
@user-hn3lf4nx8o 2 жыл бұрын
Спасибо, помогло в работе
@justlama0
@justlama0 3 жыл бұрын
Годнота)
@easycodeunity3d14
@easycodeunity3d14 2 жыл бұрын
Кайф. Спасибо!
@lkghost7
@lkghost7 3 жыл бұрын
просто отлично
@user-tf9lo4fi4m
@user-tf9lo4fi4m 3 жыл бұрын
Сама тема классная, да и голос что надо. Чего мне реально не хватает, это дельных примеров (желательно простоватых), где это конкретно стоило бы применить. А так, спасибо, очень познавательно.
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Этот ролик про то, как работает изнутри, естественно он предполагает опыт использования тасок. В интернете куча примеров для новичков есть, в том числе рунете
@orik9242
@orik9242 3 жыл бұрын
Я от Сакутина. Очень благодарен ему за рекламу и тебе за познавательное видео.
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Я ему тоже благодарен, бустанул мне канал очень хорошо)
@rdragon587
@rdragon587 3 жыл бұрын
Cool) thanks
@AlexPlayer1000
@AlexPlayer1000 3 жыл бұрын
Было бы здорово в будущем увидеть уроки по UniRX сейчас на работе только их и используем
@aynotation5202
@aynotation5202 Жыл бұрын
Не первый раз смотрю это видео, но если раньше это было просто под попкорн, и я тогда ничего так и не понял, то сейчас возникла именно необходимость в данном материале, и зашло на 10/10. Ни один из вопросов по асинкам не остался без ответа. Благодарю
@user-qb8lx2uq5j
@user-qb8lx2uq5j 9 ай бұрын
Хз, в справочниках намного больше инфы. Но она вся вряд ли кому-то нужна, даже то, что здесь, не нужно большинству программистов Unity. Но стоит как минимум прочитать, чтобы иметь представление и все это не казалось магией в реальных примерах.
@inrage7871
@inrage7871 Ай бұрын
@@user-qb8lx2uq5j Подскажи такой справочник пожалуйста
@skyjen5594
@skyjen5594 2 жыл бұрын
Я исполнил твою сихнронную операцию!
@aa-ly9on
@aa-ly9on 2 жыл бұрын
Спасибо
@KillerBestUselesmoun
@KillerBestUselesmoun 3 жыл бұрын
Крутая инфа с точки зрения понятий устройства async await методов внутри, но так как канал ориентирован на разработку на Unity, я ожидал увидеть практичное применение этих самых async await, рассмотреть отличия async await от корутин и как можно заменить эти самые корутины. Машина состояния - одновременно интересно и не понятно) особенно не понятно, где это можно применять)
@gaitavr1992
@gaitavr1992 3 жыл бұрын
На базовом уровне там нечего применять, я хотел рассказать о внутренностях, так как это мало кто знает. Разработка на юнити ведется на шарпе и кто им не владеет хорошо - ничего не сможет сделать толкового
@gaitavr1992
@gaitavr1992 3 жыл бұрын
И машину состояний сам никто не пишет, кроме кастомных эвейтеров. Зато знание принципа дает избежать различных проблем типа дедлока
@user-xi6lq7iy4t
@user-xi6lq7iy4t 3 жыл бұрын
хорошее видео, спасибо..можно сделать такое же, но про корутины ? как они под капотом работают и потом их сравнение с async/await
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Как-нибудь дойдем
@stanislavsh6582
@stanislavsh6582 3 жыл бұрын
Хех, помню времена когда TPL не было. Хорошо, что те времена уже в прошлом. Не то чтобы я такой старый, просто шарп начал ковырять еще в школе.
@user-bc4me5kz7j
@user-bc4me5kz7j 3 жыл бұрын
Спасибо большое за видео. Очень интересно если бы ты рассказал про многопоточность в юнити. Например как работают корутины, в одном потоке ли работает юнити и если да, то по какой очередности запускаются скрипты? Спасибо еще раз
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Судя по тому, что вы написали, присутствует сильная путаница. В рамках c# роликов сниму
@eyellen
@eyellen Жыл бұрын
Очень интересно, хотелось бы спросить, а где можно найти все эти тонкости языка ? А то я прошелся по возможностям языка, но теперь интересно как оно устроено внутри, хочется узнать все тонкости и детали, может есть какая-то книга ? Или где вообще можно найти об этом ?
@ilyanazarov7001
@ilyanazarov7001 2 жыл бұрын
Спасибо за видео! Запустил у себя ваш кастомный awaiter, но обнаружил, что второй await также срабатывает при повторном нажатии button1. Результат при этом выводит такой же, как и при последовательном нажатии button1 и button2. Почему так?
@nonamenoname5824
@nonamenoname5824 3 жыл бұрын
Good
@user-bo6zf7ip7p
@user-bo6zf7ip7p 2 жыл бұрын
коментарий оставил. остальное сделал сразу перед видео, поэтому чтобы продолжить асинк или авейт?
@ruslan_yefimov
@ruslan_yefimov 2 жыл бұрын
Такой чёрной магии я не видел с тех пор, как пытался писать шейдеры..
@grinde_wald6888
@grinde_wald6888 3 жыл бұрын
Здравствуйте, могли бы вы рассказать как можно сделать меню паузы с остановкой игры, но чтобы при этом анимация и Particle system работали нормально. Заранее спасибо. И большое спасибо за познавательный контент.
@NoldoWalker
@NoldoWalker 3 жыл бұрын
Очень мощно, недавно начал сам изучать эту тему, а тут удачно подъехал видос. Я правильно понимаю, что объяснение про машину состояний - это про то что под капотом у асинк-авейта и в целом можно и без знания этого им пользоваться? Просто в этом месте я понимание потерял. Upd. Из примера про кнопку понял что только с базовыми типами. Надо будет довкурить, чтобы делать камтомные авейтеры на все подряд.
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Все верно, стейт машина+эвейтер+каркасный метод и будет работать без async await
@NoldoWalker
@NoldoWalker 3 жыл бұрын
@@gaitavr1992 спасибо
@Bushido_Cat
@Bushido_Cat Ай бұрын
подскажи плис где можно почитать по подробнее по тому что ты показал?
@mprils
@mprils 3 жыл бұрын
Хорошее видео, спасибо Однако Стоило рассказать как не нужно делать чтобы не получить дедлок А также, что цена этого всего удобства - аллокация памяти И если в обычном .нет вне юнити - это терпимо, то у юнити довольно печальный GC Поэтому что-то там поэвейтить в UI - это нормально, а вот создавать таски направо и налево в игровой логике - так себе идея
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Примеров дедлоков куча в интернете, я не хотел еще затягивать и без того сложное видео. А про выделение памяти все сказано
@timurakhmetov5725
@timurakhmetov5725 3 жыл бұрын
Максим, спасибо за видео. У меня вопрос: где выполняется таска, которую мы await'им. Вот у нас есть асинхронный метод, мы его вызываем, он выполняется до первого await, в await у нас таска, выполняющая длительную операцию. после await управление возвращается, основной поток не блокируется, и выполняет другие операции. Но где выполняется таска: в основном потоке параллельно (хотя насколько я помню, поток может выполнять только 1 задачу), в другом потоке, берется он из пула и т.д.? И как с этим всем связана машина состояний?
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Лучше еще раз посмотреть видео, особенно момент с самописными эвейтерами
@alexsklyarov6792
@alexsklyarov6792 3 жыл бұрын
Круто, еще б примеры где лучше применять async, а где IEnumerator, спасибо.
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Так это разные вещи в плане применения. Async нужен для асинхронного выполнения метода. Ienumerator это перебор коллекции
@alexsklyarov6792
@alexsklyarov6792 3 жыл бұрын
@@gaitavr1992 я возможно не совсем понял ответ, но я имел ввиду когда используют coroutine и в методе есть такой код: yield return new WaitForSeconds(time), зарание спасибо)
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Ну корутина только с gameobject работает и всегда в одном потоке. Async работает везде и можно настроить потоки. Для легких вещей корутина ок
@seldemirov
@seldemirov 3 жыл бұрын
@@gaitavr1992 Насколько я понимаю, async включает в себя весь функционал корутины и привыкнув к нему можно от корутин отказаться. Так ли это? Или есть случаи где так просто замену провести не получится?
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Корутина легче таски, иногда это критично. Плюс ожидание кадра и подобные юнити вещи заменить сложно
@Nik0lay11
@Nik0lay11 2 жыл бұрын
Если есть таска t и у нее есть ContinueWith то нужно ли делать после ее создания await t - а то в видео говорится что авейтить целую конструкцию не получится(либо одно либо другое) но автор добавляет код "await t;"? Если авейт нужен то после него может быть еще код и другие авейты(которые отработают после ContinueWith?)? Если не нужен то как обработается ексепшн если он выбросится в ContinueWith?
@SterinGM
@SterinGM 2 жыл бұрын
Под WebGL это будет работать? У меня не получилось завести ((
@alexspeleers
@alexspeleers 3 жыл бұрын
видел на каком-то буржуйском канале про стейт машину в асинк авейте, но там о билдерах/диспоузах ничё не говорили, как же хорошо что это всё под капотом и не надо гемороится. А кста разве оно не в IL код компилится, или вот тот С# код со свичами ты чисто для наглядности бахнул?
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Это до IL кода, все await и async преобразуются в стейт машины и эвейтеры
@peterpashchenko301
@peterpashchenko301 2 жыл бұрын
Круто. очень advanced, но увы весьма сложно для понимания. Кроме разных вариантов применения класса Task.
@vasyalapuh2878
@vasyalapuh2878 2 жыл бұрын
Самое время написать что сложно с наскока понять.
@TheTalionn
@TheTalionn 3 жыл бұрын
А можно 1-2 примера, когда стоит все таки отправлять Task в отдельный поток?
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Я делаю это при первой возможности, чтобы разгрузить главный и если я не работаю с юнити типами (gameobject, texture и тд)
@TheTalionn
@TheTalionn 3 жыл бұрын
@@gaitavr1992 спасибо
@ViATVmy
@ViATVmy 3 жыл бұрын
Спасибо если можно и про
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Про что?
@Gekker42
@Gekker42 3 жыл бұрын
@@gaitavr1992 походу он OperationCanceledException получил пока писал, а отправка сообщения уровнем выше стояла
@staskapanin
@staskapanin 3 жыл бұрын
Максим, что думаете по поводу последних двух абзацев(Avoid using async and await) из этой страницы документации Unity? docs.unity3d.com/Manual/overview-of-dot-net-in-unity.html Контекст синхронизации Unity всё равно заставляет работать всё в главном потоке и нужно использовать контекст по умолчанию или свой? Одинаково ли работает async/await в .NET и в Unity IL2CPP(на разных платформах, например UWP)?
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Таски генерируют много мусора, что критично в узких горлышках(по ситуации смотрят). Если не указать какой синхронизационный контекст использовать, то все выполнится в том же потоке и проблем с unity типами не будет. А вот если эти типы не использовать, и не выполнять работу в том же контексте, то будет работать быстрее.
@gaitavr1992
@gaitavr1992 3 жыл бұрын
С uwp работал очень давно, когда еще таски не знал, сложно сказать. Ставлю на то, что будет работать
@alexspeleers
@alexspeleers 3 жыл бұрын
бекгрануд в паверпоинте - юзал в универе на каких-то презентациях (((:
@GaniSo
@GaniSo 7 ай бұрын
жалко что у тебя перестали выходит видео (
@tr0sty
@tr0sty 3 жыл бұрын
есть ли способ килять все асинхронные процессы, запущенные в коде, при выходе из play mode в эдиторе?
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Я бы cancellation token использовал. Также при рекомпиляции таски очистятся
@user-sj6rx9yu8y
@user-sj6rx9yu8y 2 жыл бұрын
Await'ы, как я понял, лишь маркеры для компилятора, показывающие, как разбивать метод. Что будет, если между await'ами поставить goto? Например, {Label: await Task.Wait(1000); goto Label;} будет всего лишь бесконечный переход на состояние 1? Или такой подход может прям сломать async/await?
@gaitavr1992
@gaitavr1992 2 жыл бұрын
Мне такое никогда не пришлось бы попробовать. Я не использую goto в принципе, а вот в async/await он используется
@user-sj6rx9yu8y
@user-sj6rx9yu8y 2 жыл бұрын
@@gaitavr1992 а я все же проверил. Ничего не сломалось. Видимо, бесконечный переход на состояние 1
@modjaid3907
@modjaid3907 3 жыл бұрын
а в юнити требуется использование тасков и асинхронных методов? Вроде же все решают курутины
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Это один из инструментов, требоваться может только в том случае, если команда повсеместно его использует. Но скажу сразу, что если проект не очень стеснен в производительности , то там будет или UniRX или Task
@user-oe4op3bk1g
@user-oe4op3bk1g 3 жыл бұрын
На слух очень сложно понять, вот бы код посмотреть
@vasyalapuh2878
@vasyalapuh2878 2 жыл бұрын
Я понял что ничего не понял. Требуэ пересмотр.
@greemdim4611
@greemdim4611 3 жыл бұрын
А как вы смотрите на то, чтобы создать плейлист по сишарпу на юнити для людей, которые знают только основы обычного сишарпа?
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Если человек знает обычный шарп - у него нет проблем в юнити с этим)
@greemdim4611
@greemdim4611 3 жыл бұрын
@@gaitavr1992 ну, я вот например знаю основы, то есть переменные, циклы, условия, массивы и так далее. Но при этом программировать на юнити я не могу, там же сишарп другой по идее
@gaitavr1992
@gaitavr1992 3 жыл бұрын
7й си шарп, вам нужно несколько вводных уроков пройти для начинающих, так как у меня контент ориентирован на повышение квалификации разработчиков junior +
@polarbar780
@polarbar780 2 ай бұрын
Вижу, что ролик общеобучающий. В этой ситуации объяснять различие между асинхронным программированием и многопоточностью в начале неправильно. Это сбивает людей с толку. Разумно сосредоточится на самом механизме,принципе его работы, а само различие объяснить в конце. Тем более,что это различие не касается самого механизма. Я могу с помощью async-await запустить две параллельные задачи, которые будут выполняться на CPU и это не какой-то крайней случай, а вполне распространенная практика. Да и сам термин "асинхронность" но никак не связан с CPU, скорее он означает процессы, выполняющиеся независимо друг от друга. Поэтому, есть ли разница в какой среде происходит это выполнение (на разных устройствах или одном cpu)? На мой взгляд нет. Всё твердят как догму "асинхронность не равно многопоточность", а я скажу, что в ряде случаев равно 😅 И что, я буду не прав?
@_EnVyUs
@_EnVyUs 3 жыл бұрын
когда узнаешь внутренности функций или какой либо логики в языке программирование, это пугает и ты отказываешься от использования этих возможностей :\
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Не надо так)
@andrew_t800
@andrew_t800 3 жыл бұрын
Нрмас. Я не ожидал описания того что происходит "внутри". Много "кривой" инфы у других авторов - иногда прям бесит. Запили видос про потоки! Как и когда использовать, ато у меня весь проект изначально на корутинах, а вот выделили время на рефактор, но я в Юнити не силён в потоках - очень не хочется "перемудрить".
@gaitavr1992
@gaitavr1992 3 жыл бұрын
Дойдем и до потоков
@ilyakruglow6486
@ilyakruglow6486 3 жыл бұрын
я думал асинк не работает с монобехами
@addmusic1484
@addmusic1484 2 жыл бұрын
Люди у вас тоже ошибка: async не поддерживается 2.3 версии
@malvislightfadynightgames2925
@malvislightfadynightgames2925 3 жыл бұрын
Так и не была раскрыта явная разница между многопоточностью и асинхронностью. На том же metanit объясняется лучше
@saasrus
@saasrus Жыл бұрын
Инфа очень плотная, это видос не на один раз, несмотря на небольшой хронометраж.
@Andrei_Kozlov
@Andrei_Kozlov 2 жыл бұрын
При объяснении не хватает примеров в играх... по этому полное непонимание
@igorcoolman
@igorcoolman 11 ай бұрын
первые 5 минут понятно, потом ересь какая-то
@coolrash
@coolrash 2 жыл бұрын
Нахрен мне этот async, если я никак не могу с ним взаимодейстовавать с игрой? Ну для вычисление всяких формул пойдет, но мне надо нормальный многопоточность и с нормальным доступом с основным потоком. А то там все нельзя ничего взять присвоимть. Вообще ничего нельзя. Только вычисление координаты х и то как это возвращать - тайна века. Кароче много поточность в юнити сосет
@gaitavr1992
@gaitavr1992 2 жыл бұрын
Что за высер?
@coolrash
@coolrash 2 жыл бұрын
@@gaitavr1992 я пытался генерировать коллайдер в реальном времени, изза этого в игре были фризы достаточно много кадров, что очень портило игру. Я хотел это в фоне обработать и передать в основной поток. Но как я понял, в юнити нету многопоточности с основным игровым потоком. Только эти координаты можно обработаьь и васё. А так тогда был излишне эмоционален, так как 1 месяц потратил на эту затею и не смог решить эту проблему.
@malvislightfadynightgames2925
@malvislightfadynightgames2925 3 жыл бұрын
Опять цвета одинаковые. Как это понимать. Если бы цвета значимых типов и ссылочных типов были разные, то тебе не пришлось бы объяснять, что AsyncVoidMethodBuilder это структура. Не подумай, что я придираюсь, я просто хочу сделать из твоих шикарных знаний в виде видеоуроков ещё и удобную интерпретацию для впитывания этих знаний.
@ashotrustavelyan7498
@ashotrustavelyan7498 7 ай бұрын
в самом главном моменте обьяснения не обьяснил
@belousov_gaming
@belousov_gaming 2 жыл бұрын
Спасибо за видео!
⬅️🤔➡️
00:31
Celine Dept
Рет қаралды 48 МЛН
OMG😳 #tiktok #shorts #potapova_blog
00:58
Potapova_blog
Рет қаралды 3,6 МЛН
Sigma Girl Past #funny #sigma #viral
00:20
CRAZY GREAPA
Рет қаралды 22 МЛН
Разбор unity3d тестовых заданий от подписчиков ч1
2:53:30
ООП вопросы на юнити собеседовании
14:11
Максим Крюков
Рет қаралды 42 М.
Асинхронные методы в Unity
1:16:37
Skillbox GameDev
Рет қаралды 1,3 М.
Основы Asyncio
53:25
Python Russian
Рет қаралды 12 М.
Паттерн состояние в unity 3D
12:40
Максим Крюков
Рет қаралды 20 М.
⬅️🤔➡️
00:31
Celine Dept
Рет қаралды 48 МЛН