The original asker edited their question with the solution they used. However, as questions should not be edited to include the answers, I have removed the code to post as a community wiki.
----
The original asker reports that they used this code to meet their requirements:
function Update (){
for (var i =0; i < OppoCount.length ; i ++){
if(OppoCount.length > 0) {
if (OppoCount[i].gameObject == null){
OppoCount.RemoveAt(i);
}
if(OppoCount.length < HowMany){
StartCoroutine ("Spawn");
}
}
}
function Spawn(){
var length = Oppos.length - 1;
var index = Mathf.Round(length*UnityEngine.Random.value);
curSpawn = Oppos[index];
var xz = Random.insideUnitCircle * spawnSizeArea;
var newPosition = Vector3(xz.x,0,xz.x) + transform.position;
yield WaitForSeconds(Random.Range(2,4));
var newOp : GameObject = Instantiate(curSpawn, newPosition, transform.rotation);
OppoCount.Push(newOp);
StopCoroutine("Spawn");
}