Execution order when Start is declared with IEnumerator return (as a Coroutine)

I could find in the documentation the event execution order of Start and Update, which says:

Start: Start is called before the first frame update only if the script instance is enabled.

For objects added to the scene, the
Start function will be called on all
scripts before Update, etc are called
for any of them.

As I understand it, when loading a scene, Update will only be called after all Start functions are called on all GameObjects.

What about the case where Start is a Coroutine (declared with IEnumerator return)? Will Update be called after all Start are called, or after all Start are finished?

I’ve done a simple test using this script in two GameObjects:

public class StartAsCoroutine : MonoBehaviour
{
    private void Awake()
    {
        StartCoroutine(Step("Awake"));
    }

    private IEnumerator Start()
    {
        yield return StartCoroutine(Step("Start"));
    }

    private void Update()
    {
        Debug.Log(gameObject.name + ": " + "Update" + " frame " + Time.frameCount);
    }

    private IEnumerator Step(string method)
    {
        while(true)
        {
            Debug.Log(gameObject.name + ": " + method + " frame " + Time.frameCount);
            yield return 0;
        }
    }
}

The result is that Update is called in the same frame that all Start are also called. Unity doesn’t wait for the Start coroutine completion to begin calling Update. The calls to the coroutines are done after the Update calls, as expected.

With this behaviour, it makes no sense for me to having Start as a coroutine, as I could StartCoroutine at void Start().