Всем привет. Начал работать с одним проектом. Создал корутины. Они берут значения с сервера и записывают их в параметры объекта. В чем проблема: мне нужно вызывать их для нескольких объектов, и когда я прописываю их по очереди, происходит так, что одна корутина не успела взять значения с сервера, а вторая уже вызвалась, либо наоборот. Могу ли я сделать так, чтобы корутины вызывались только после того, как завершится предыдущая.
У кого какие варианты? Мне достаточно теории. Код не обязательно. Заранее спасибо.
Конструкция yield return внутри тела IEnumerator является эдакой точкой передачи управления.
Грубо говоря если вы делаете yield return new WaitForSecond(2) - корутина передаёт управление внутрь этого класса и ждёт пока он не закончит свою работу, после чего возвращается и продолжает работу дальше.
Аналогичным образом можно передавать управление и другим корутинам
private void Start()
{
StartCoroutine(FirstRoutine());
}
IEnumerator FirstRoutine()
{
yield return null;
print("Пропущен кадр");
yield return new WaitForSeconds(1);
print("Прошла секунда");
yield return StartCoroutine(SecondRoutine());
print("Прошло две секунды");
}
IEnumerator SecondRoutine()
{
yield return new WaitForSeconds(2);
}
В вашем случае будет одна корутина, например, LoadRoutine(), которая последовательно передаёт управление в другие корутины, которые получают и применяют необходимые данные.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости