我正试图找出一种干净的方法,让一个方法循环一个循环的协程,然后在协程成功时终止,如果不是它重新调用自己并产生两倍的秒数。
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(),还是超级麻烦?必须有一个更清洁的方式来做到这一点。任何帮助都将非常感激。
答案 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执行相同的过程。