Comments 4
У корутин есть еще одна болячка: она не может запустится в том MonoBehaviour, чей GameObject не активен и сразу падает с ошибкой, так что приходится проводить доп. проверку на
activeInHierarchy
Корутины можно остановить через StopCoroutine, имхо это даже проще токенов.
На пример с "ECS" больно смотреть, написали бы лучше пример с заведомо async вещами, тот же http-запрос, потому что игровую логику тасками в ECS не пишут, но окей.
Пример с ECS не раскрывает минуса корутин, свой глобальный CoroutineManager для сцены пишется за 5 минут. Я бы наоборот выделял привязку к объекту как возможный плюс, потому что таскаться с токенами, либо ловить нулрефы в повисших тасках не прикольно.
Корутины создают объекты в памяти, но Unity их кэширует (запоминает) для повторного использования. UniTask работает еще эффективнее и не создает лишних объектов.
Это не совсем правда, UniTask использует пулируемые промисы, так что по крайней мере при первом вызове, например, delay, будет выделение. Аналогично с раннерами стейт машин асинхронных методов.
А начиная с версии 2023.1, появился awaitable, так что целесообразность использования и корутин, и UniTask под вопросом
Забыли про основное корутины не умеют возращать
Unity: корутины и UniTask — когда что использовать