2016-01-21 33 views
0

我試圖弄清楚一個乾淨的方法,通過循環的協程循環,然後在協程成功時終止,如果不是它重新調用自身併產生雙倍的秒數。重複出現的協程

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

我上面的代碼,但我不能工作,如何重新運行本身,我可以叫RecoccuringCoroutine()在coroutineToRun的回調,或者是超亂?必須有一個更乾淨的方式來做到這一點。非常感激任何的幫助。

回答

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

這個想法是在yield return StartCoroutine中。 ReoccuringCoroutine正在等待coroutineToRun完成。一旦內部協程完成,它將把控制返回到ReoccuringCoroutine。

你實際上是用WaitForSeconds做同樣的過程。