I can't get yield functions to work

Hello I place a sprite prefab on my game with left click and I try to stop any others actions until the mouse button is released. Otherwise many instances of this prefab are created and I only want one.

I tried to create a coroutine to wait until the left button is released but its not working. And even if I replace it by a WaitForSeconds() function I got no delay at all in both case.

Here is my Code:

IEnumerator WaitForButtonUp ( )
	{
    //do
    //	{
    //    yield return null;
    //	} 
	//while ( Input.GetMouseButtonUp(0) );
	yield return new WaitForSeconds(8.0f);

	}	

void StartToWait() {
        print("Starting " + Time.time);
        StartCoroutine(WaitForButtonUp());
        print("Before WaitForButtonUp Finishes " + Time.time);
    }

No delay are shown in console :

Starting 6.619012

Before WaitForButtonUp Finishes 6.619012

The problem is that StartToWait does not yield for WaitForButtonUp to complete. It asks the coroutine to start and continue to the next print statement. Meanwhile, the coroutine execute - and yield - correctly. Just place the statement within the coroutine to verify.

AFAIK, there’s no way to have a void method yield. A coroutine may yield a second coroutine, though:

IEnumerator StartToWait()
{
	Debug.Log("StartToWait BEFORE " + Time.time);
	yield return StartCoroutine(WaitForButtonUp());
	Debug.Log("StartToWait AFTER " + Time.time);
}

IEnumerator WaitForButtonUp()
{
	Debug.Log("WaitForButtonUp BEFORE " + Time.time);
	yield return new WaitForSeconds(8.0f);
	Debug.Log("WaitForButtonUp AFTER " + Time.time);
}

At the light of your comment I found a working a solution for my problem wich is holding a script until a condition is meet.
In my case wait until the mouse button is released before i can execute my drawing script again.
I can’t really hold it because the coroutine is executed in parallel but I can disable it until the coroutine have finish the yield using a simple bool variable.

Here is my working code :

IEnumerator WaitForButtonUp()
        {
	//disable the desired script here
	cantClick=true;	

        do
   	{
           yield return null;
        } 
        while ( !Input.GetMouseButtonUp(0) );
	
	//enable it here
	cantClick=false;	
    
	}

And the script I want to disable looks like this :

void DrawItems()
{

	if (Input.GetMouseButton(0))
		{
		if (!LevelData.dataTilesLayer[boardX,boardY] & !cantClick)
			{
			// Place Mob
			PlaceItem();
            StartCoroutine("WaitForButtonUp"); //WAIT IN PARALLEL FOR MOUSE UP
			
			}
        }
  }	

Thanks again for your input.