再见Coroutine

时间:2016-01-21 21:36:55

标签: c# unity3d 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(),还是超级麻烦?必须有一个更清洁的方式来做到这一点。任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:0)

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;
    }
}

这个想法是在收益率回报StartCoroutine。在coroutineToRun上ReoccuringCoroutine正在等待完成。一旦内部协程完成,它将控制返回ReoccuringCoroutine。

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