Coroutine Won't Stop Using IEnumerator

See my code below. I don’t understand why using the string variant of Start/StopCoroutine makes everything work as expected (drains stamina on key press/hold, stops drain on key release), but when I try to use the IEnumerator version of Start/StopCoroutine the stamina drain begins on key press as expected, and continues on key hold, but also continues on key release and never stops.

Am I missing something?

void Update ()
    {
        if(Input.GetKeyDown(KeyCode.Keypad0) && transform.GetComponent<Attributes>().stamina >

        {
            transform.GetComponent<Attributes>().AdjustStamina(-2);
            blocking = true;
            //StartCoroutine("BlockingDrain");
            StartCoroutine(BlockingDrain());
        }
        if(Input.GetKeyUp(KeyCode.Keypad0))
        {
            blocking = false;
            //StopCoroutine("BlockingDrain");
            StopCoroutine(BlockingDrain());
        }
    }

    IEnumerator BlockingDrain ()
    {
        for (;;)
        {
            transform.GetComponent<Attributes>().AdjustStamina(-1);
            yield return new WaitForSeconds(0.25f);
        }
    }

The answer in this question should help ya: How to stop a co-routine in C# instantly? - Questions & Answers - Unity Discussions