How can i get my Coroutine to work every time my player takes damage?

Hey there, noob here!

Im looking to make my player blink/flash on and off when it collides with an enemy. I managed to make the coroutine work but it only works on the initial collision with an enemy but it doesn’t work again after the second or third hit. The player does take damage, the health does go down as expected but the blinking does not. This is my code so far;

This is from my Player script:

public void Damage()
    {
        health -= damage;

        if (health <= 0)
        {
            health = 100;
            lives--;

            if (lives == 0)
            {
                Destroy(this.gameObject);
            }
        }
    }

    public IEnumerator BlinkingPlayerDamage()
    {
        Color color = spriteRenderer.color;

        while (blinkTimer != blinkLength)
        {
            blinkTimer++;

            color.a = 0.5f;
            spriteRenderer.color = color;
            yield return new WaitForSeconds(0.1f);

            color.a = 1f;
            spriteRenderer.color = color;
            yield return new WaitForSeconds(0.1f);
        }
    }
}

This is from my Enemy script:

    private void OnTriggerEnter2D(Collider2D other)
    {
        if (other.CompareTag("Player"))
        {
            Player player = other.transform.GetComponent<Player>();

            //deals damamge when collision with with player occurs
            if (player != null)
            {
                player.Damage();
                player.StartCoroutine(player.BlinkingPlayerDamage());
            }

            Destroy(gameObject); //destroys enemy after collision
        }
    }
}

Ive tried setting a blinkActive bool to help and starting the coroutine from the damage method on the player Script but i still doesnt loop with every damage.

please help!

This code here might be the issue:

         while (blinkTimer != blinkLength)
         {
             blinkTimer++;
             //...
          }

Are you resetting blinkTimer every time you run the coroutine. If not, the while loop will just break immediately from the last run, since blinkTimer is still equal to blinkLength from the first run. @maldia