How do I create a repeating Delay?

Definitely do not start a coroutine every frame.

One solution that avoids coroutines is to just make your own float timer and count it up until it is time to re-send.

Another solution is to start the coroutine ONCE, and have a while loop that contains a yield for the appropriate wait interval.

Coroutines in a nutshell:

Splitting up larger tasks in coroutines:

Coroutines are NOT always an appropriate solution: know when to use them!

Our very own Bunny83 has also provided a Coroutine Crash Course:

https://answers.unity.com/questions/1749615/coroutines-ienumerator-not-working-as-expected.html?childToView=1749714#answer-1749714