Coroutines insider another coroutine.

I’m trying to make a system that instantiate prefabs based on time,i need a way to make booth automatic and by code instantiating.

Example  :
game start
reach 10 seconds
from 10 to 20 seconds of play,instantiate a object every second (11,12,13,etc)
from 20 t0 30 seconds of play,instantiate a object every 0.4 seconds and another object every 0.7 seconds.
from 30 to 40,instead of automatic system,manually set via code the instantiations.
if time > 34
instantiate once
yeld.
if time > 36.4
instantiate once
yeld.

etc.

What i did so far :

IEnumerator Example() {
	 while (Time.timeSinceLevelLoad >5.0 && (Time.timeSinceLevelLoad <10.0)) {
		
		InvokeRepeating("aa", 0, 1.0F);
		
	
	}
	
		while (Time.timeSinceLevelLoad >10.0 && (Time.timeSinceLevelLoad <23.0)) {
		
		InvokeRepeating("bb", 0, 1.0F);
		
	
	}
	
	
	
	
	if (Time.timeSinceLevelLoad >24.0){
	//stuff once
	//yeld;
	
	
	}
	
	
	
		if (Time.timeSinceLevelLoad >26.4){
	//stuff once
	//yeld;
	
	
	}
	
	
	
	}
	
	
	
	
	
	void aa (){
	// stuff
	}
	
	
		void bb (){
	// other kind of stuff
	}
	
	}

Something like this would accomplish what I think you want to do. The code in Awake sets up the scenario you described

using UnityEngine;

public class TimedInstantiater : MonoBehaviour {
	
	public GameObject[] prefabs

	public IEnumerator InstantiateRepeating(GameObject prefab, float delay, float difference, float length) {
		yield return new WaitForSeconds(delay);
		float startTime = Time.time;
		while(Time.time - startTime < length) {
			Instantiate(prefab);
			yield return new WaitForSeconds(difference);
		}
		return true;
	}

	public IEnumerator InstantiateOnce(GameObject prefab, float delay) {
		yield return new WaitForSeconds(delay);
		Instantiate(prefab);
		return true;
	}

	public void Awake() {
		StartCoroutine(InstantiateRepeating(prefabs[0], 10f, 1f, 10f));
		StartCoroutine(InstantiateRepeating(prefabs[1], 20f, 0.7f, 10f));
		StartCoroutine(InstantiateRepeating(prefabs[2], 20f, 0.4f, 10f));
		StartCoroutine(InstantiateOnce(prefabs[3], 34f);
		StartCoroutine(InstantiateOnce(prefabs[4], 36.4f);
	}
}