Coroutine not destroying gameobjects?

I created a coroutine with a debug.log so I would know the program is reading the user input and it seems that it is and the 10 second cooldown in the form of WaitForSeconds is also working for the Debug.Log but none of the methods inside are being called. All of the methods work on their own as they are already functioning in the game in other areas. The only time they don’t respond is within a coroutine where I require user input even though the Debug.Log is saying that the user input is being read.

    IEnumerator Powerbomb () {
        if (Input.GetKeyDown (KeyCode.Space)) {

            //Calls a pre-tested method that spawns a explosion particle before the gameobject is destroyed below
            SpawnParticle ();

            //Destroys all gameobjects with this script once the spacebar is pressed
            Destroy (this.gameObject);

            // Calls a pre-tested method to add points to scoreboard
            AddToTheScore ();

            // Debug line to ensure the if statement is working when the Methods aren't
            Debug.Log ("worked");
            // Trying to give the ability a cooldown using a WaitForSeconds of 10 to test.

            yield return new WaitForSeconds (10);
        }
    }

Where do you start the Coroutine? Waiting at the end of a coroutine that does not return anything also seems weird when you don’t have it in a while loop?

Cooldowns are easy to make without a coroutine. Something like this should suffice.

    public float cooldown = 10f;

    private float timeWhenReady;

    // Update is called every frame, if the MonoBehaviour is enabled
    private void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space) && Time.time > timeWhenReady)
        {
            timeWhenReady = Time.time + cooldown;
            SpawnParticle();
            // etc
        }
    }

    private void SpawnParticle()
    {

    }

If you insist on using a Coroutine perhaps do something like this.

    public float cooldown = 10f;

    private WaitForSeconds waitForCooldown;

    IEnumerator Start()
    {
        waitForCooldown = new WaitForSeconds(cooldown);
        while (true)
        {
            if (Input.GetKeyDown(KeyCode.Space))
            {
                SpawnParticle();
                yield return waitForCooldown;
            }
            else
            {
                yield return null;
            }
        }
    }

    private void SpawnParticle()
    {

    }

ty