Загадка про сопрограмму

Общие вопросы о Unity3D

Загадка про сопрограмму

Сообщение Coks 20 май 2022, 21:29

Что будет, если запустить несколько экземпляров корутин с одним экземпляром (общей) елдой-инструкцией?
1. Будут работать все запущенные корутины.
2. Ни одна корутина не будет работать.
3. Будет ошибка рантайма.
4. Будет работать только одна корутина.

Синтаксис:
Используется csharp
private readonly WaitForSecondsRealtime _intervalInstruction = new WaitForSecondsRealtime(0.33f);

public void StartProcess()
{
    StartCoroutine(Process());
    StartCoroutine(Process());
    StartCoroutine(Process());
    StartCoroutine(Process());
}

private IEnumerator Process()
{
    while (true)
         yield return _intervalInstruction;
}


Правильный ответ:
Скрытый текст:
4


Кто правильно ответил сходу тому: (3A4OT)
Coks
UNец
 
Сообщения: 24
Зарегистрирован: 07 мар 2012, 12:45

Re: Загадка про сопрограмму

Сообщение 1max1 20 май 2022, 22:12

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

Синтаксис:
Используется csharp
public class XXX : MonoBehaviour
{
    private WaitForSecondsRealtime _intervalInstruction = new WaitForSecondsRealtime(0.33f);

    public void StartProcess()
    {
        StartCoroutine(Process(1));
        StartCoroutine(Process(2));
        StartCoroutine(Process(3));
        StartCoroutine(Process(4));
        StartCoroutine(Process(5));
    }

    private IEnumerator Process(int i)
    {
        while (true)
        {
            print(i);
            yield return _intervalInstruction;
        }
    }

    void Start()
    {
        StartProcess();
    }
}


Изображение
Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10