why does Coroutine 'yield return 0' sometimes take a lot of frames before it continues

Hi
I am having an issue where game object hangs around for a few seconds doing nothing at start up while the rest of the scene continues normally.
The amount of frames it waits varies and is sometimes insignificant, but on occasions the delay can be very noticeable.

I eventually tracked it down to a ‘yield return 0’ and recreated it using this code

public class TestScript : MonoBehaviour {
	
	int m_count = 0;
	
    IEnumerator MyTest()
	{
		while (true)
		{
			print("-Before Yield " + Time.time);
        	yield return 0;
        	print("-After Yield " + Time.time);
		}
	    }	
	
	public void Awake ()
	{	
	
		print("-Starting Coroutine " + Time.time);
        StartCoroutine(MyTest());
        print("-Done Starting Coroutine " + Time.time);
	}
	
	
	// Use this for initialization
	void Start () {
		print("-Start Called " + Time.time);
	}
	
	// Update is called once per frame
	void Update () {
		print("-" + m_count + "  Update Called " + Time.time);
		++m_count;
	}
}

If I create a new project, add an empty object and stick this in it it produces the following output, and in this case took 117 frames and 1.8 seconds before it continues

[10680] -Starting Coroutine 0
[10680] -Before Yield 0
[10680] -Done Starting Coroutine 0
[10680] -Start Called 0
[10680] -0  Update Called 0
[10680] -1  Update Called 0.02
[10680] -2  Update Called 0.2507744
[10680] -3  Update Called 0.2640077
[10680] -4  Update Called 0.2772415
[10680] -5  Update Called 0.2904751
[10680] -6  Update Called 0.3037083

.....

[10680] -112  Update Called 1.725368
[10680] -113  Update Called 1.751448
[10680] -114  Update Called 1.764683
[10680] -115  Update Called 1.777916
[10680] -116  Update Called 1.791149
[10680] -117  Update Called 1.804383
[10680] -After Yield 1.804383
[10680] -Before Yield 1.804383
[10680] -118  Update Called 1.817616
[10680] -After Yield 1.817616
[10680] -Before Yield 1.817616
[10680] -119  Update Called 1.830849
[10680] -After Yield 1.830849
[10680] -Before Yield 1.830849
[10680] -120  Update Called 1.844083
[10680] -After Yield 1.844083
[10680] -Before Yield 1.844083
[10680] -121  Update Called 1.857316
[10680] -After Yield 1.857316

and ingame it can be even worse and more noticeable. Especially if the framerate is a bit lower.

Is this a bug, is it something I’m (or more correctly the code that I found doing this) doing, is there a way to work around this. It has on occasion seemed like I’ve had to wait 20 or so seconds, but I haven’t been able to re-create that so could just have been my imagination.

thanks
Steve

Does the delay persist when you move the StartCoroutine() from Awake() to Start() ?