Отличие корутинных методов от обычных

Предположим, что у нас существует объект с таким кодом:

[VarwinComponent(English: "Tutorial Object", Russian:"Учебный объект")]
    public class TutorialObject : VarwinObject
    {
        [Action(English:"action 1", Russian:"действие 1")]
        public void Action1()
        {
            Debug.Log("Message 1");
        }
        [Action(English: "action 2", Russian: "действие 2")]
        public void Action2()
        {
            while (true)
            {
                // Пример бесконечного цикла
            }
            Debug.Log("Message 2");
        }
        [Action(English: "action 3", Russian: "действие 3")]
        public void Action3()
        {
            Debug.Log("Message 3");
        }
    }

И мы вызываем все три действия последовательно в самом начале программы:

../../../_images/image_127.png

В коде блока “действие 2” существует бесконечный цикл. Поскольку исполнение обычных методов происходит последовательно и непрерывно, выполнение программы полностью “зависнет” в этом бесконечном цикле вплоть до закрытия программы.

При этом, предположим, что у нас существует необходимость в создании цикла, который будет вызываться, например, один раз за кадр, а затем дожидаться следующего кадра.

Примечание

Система корутин позволяет создать блок, который, будет выполнятся некоторое количество времени, при этом не блокируя выполнение остальной части приложения.