Yield WaitForSec help in C sharp

I've checked out the documentation at Unity's site and I'm still not able to get it to work. Their examples all use the Start() function and I don't want to call the coroutine from the start function. In javascript I can place it a small pause anywhere I'd like but I'm just not having any luck with C sharp. Here's what I have:

public class MyClass : MonoBehaviour {

void Update()
{
   DoSomething();
}
public void DoSomething()
{
   print("BEFORE");
   StartCoroutine(TakeABreak(5.0F));
   print("AFTER");
}
IEnumerator TakeABreak(float seconds) 
{
    yield return new WaitForSeconds (seconds);
    print("Good news everybody!");
}

}

My result is:

BEFORE AFTER ... 5 seconds pass ... Good news everybody!

However I'd like the 5 seconds pause to happen BETWEEN the BEFORE and AFTER. How can I do this?

Thanks!

When you start a coroutine it'll go down into the coroutine function until it hits the first yield. After that, your coroutines will be "ticked" after LateUpdate. In the case of WaitForSeconds, it'll continue after that time has passed.

So if you want "AFTER" to happen after 5 seconds, you need to put it inside the coroutine itself.

Alternatively, you could make DoSomething a coroutine as well and yield on TakeABreak, so like this

public IEnumerator DoSomething()
{
    print("BEFORE");
    yield return StartCoroutine(TakeABreak(5.0f));
    print("AFTER");
}

Of course that means you have to start the function with StartCoroutine, which might be bad for a public interface. What I often do is have the public function be a standalone function that calls a StartCoroutine on a private function.