重复出现的协程

Reoccurring Coroutine

我正在尝试找到一种干净的方法来获得一种循环遍历重复协程然后在协程成功时终止的方法,否则它会重新调用自身并产生双倍的秒数。

public IEnumerator ReoccurringCoroutine(IEnumerator coroutineToRun)
{
    int timeToWait = 1;

    bool isSuccessful = false;

    while(!isSuccessful)
    {
        StartCoroutine(coroutineToRun(taskSuccessful =>
        {
            isSuccessful = taskSuccessful;
        }));

        yield return new WaitForSeconds(timeToWait);

        timeToWait *= 2;
    }
}

我有上面的代码,但我不知道如何重新运行本身,我可以在coroutineToRun的回调中调用RecoccuringCoroutine()吗,还是太乱了?必须有一种更简洁的方法来做到这一点。任何帮助将不胜感激。

public IEnumerator ReoccurringCoroutine(IEnumerator coroutineToRun)
{
    int timeToWait = 1;

    bool isSuccessful = false;

    while(!isSuccessful)
    {
        yield return StartCoroutine(coroutineToRun(taskSuccessful =>
        {
            isSuccessful = taskSuccessful;
        }));

        yield return new WaitForSeconds(timeToWait);

        timeToWait *= 2;
    }
}

思路在yield returnStartCoroutine。 ReoccuringCoroutine 正在等待 coroutineToRun 完成。内部协程完成后,它将 return 控制权交给 ReoccuringCoroutine。

您实际上正在使用 WaitForSeconds 执行相同的过程。