Exclude spawn position from array when it is occupied

Hi all,
i found some similar topics but i can not find exact solution for my problem.
I have got set an array of 4 spawn positions but when the spawn rate is high it results that sometimes objects are spawning at the same position so it is not good for my game as they stack and i need to exclude from the array that spawn position where is still a game object so they do not stack. See my code below.
If you can help and write a code so i can see exactly what to do it will be great.
(Note: I have more methods included in StartGame() so i need to use the coroutine)

public GameObject egg;
public Transform[ ] spawnEggPos;
private float spawnRate = 1.0f;

IEnumerator SpawnEggs()
{ 
yield return new WaitForSeconds(spawnRate);

int spawnPosIndex = Random.Range(0, spawnEggPos.Length);
Instantiate(egg, spawnEggPos[spawnPosIndex].position, Quaternion.identity);
}

public void StartGame()
{
StartCoroutine(SpawnEggs());
}

You could differentiate between all spawn positions, and all available spawn positions.
Initially both would be the same.
Chose spawn positions from the list of available spawn positions. Everytime something spawns, remove the chosen spawn position from the list of available spawn positions. That way you can only use any available spawn position once, until it gets re-added.
You then need to implement a mechanism to re-add used spawn positions to the list of available spawn positions, but in your request you did not specify how that is supposed to happen. Could happen on a timer… or maybe you have a function that gets called when the spawned enemy leaves the spawn point. Something along those lines. When this condition is met, you want to re-add the spawn position to your list of available spawn positions, so it can be used again. There is a lot of flexibility in how to implement this.