47 подписчиков
Какие есть проблемы у корутин и где лучше использовать таски/асинки?
Так как вопросов всё равно не так много, хотя напомню что задавать их можно тут и на любую тему, то буду отвечать по одному. Плюс новый формат — сам вопрос в заголовке. Итак, какие есть проблемы у корутин?
Да никаких. Тут конечно у меня сразу флешбеки про споры в чатах "что такое корутина?". И для начала надо бы это объединить. Когда найду красивое определение — напишу термин. Просто для понимания корутин сначала бы нужно понимать, что такое асинхронность. Так как часто люди путаются в терминах асинхронности и многопоточности, какой код является синхронным, а какой асинхронным и так далее. Многие просто под асинхронностью подразумевают многопоточность, но есть вообще три разных понятия: асинхронность, многопоточность и параллелизм.
Если описывать асинхронность на пальцах. Представьте что у вас есть переменная A и функция B. Переменная A — это состояние функции B. И в рамках выполнения вашей программы мы не исполняем функцию B до конца, а получив в ней какое-то значение состояния A ставим её "на паузу" и идём выполнять другую функцию.
Что корутина-юнити, что таски — это два механизма асинхронного программирования. Только таски в отличии от корутин-юнити могут быть асинхронными многопоточными (посредством ThreadPool), а корутины-юнити — только однопоточными (исполняются только в MainThread). Что такое в общем корутина, а не Unity-корутина — это прям надолго.
А отвечая на вопрос. У корутин вообще нет "проблем. У них есть принцип работы. И корутины юнити чаще всего удобнее во всём связанным с Unity Event Loop, чем таски. Таски не работают в WebGL, но есть удобное и среднее решение — это UniTask. Вполне себе хорошая либа для использования async/await и т.п. без гемора с Unity методами. Это просто немного разные механизмы в которых скорее важно понимать принцип их работы.
Лично я по старинке асинхронный код часто строю на колбеках, так как это работает везде. Но всё чаще под виндой юзаю таски. Корутины для всяких анимаций, эффектов физики и типа того. А чёт сложное математическое, скажем алгоритм укладки графа) — на чистых шарповых тасках.
#вопросы
1 минута
23 января 2023