Страница 1 из 1

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

СообщениеДобавлено: 20 май 2022, 21:29
Coks
Что будет, если запустить несколько экземпляров корутин с одним экземпляром (общей) елдой-инструкцией?
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)

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

СообщениеДобавлено: 20 май 2022, 22:12
1max1
Похоже на особенности реализации, эдакая не баг, а фича от юнитеков. Кстати, отработают все корутины, однако в цикле будет работать только первая.

Синтаксис:
Используется 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();
    }
}


Изображение