Czy jest nowy wątek w Unity3D?

Jestem zdezorientowany i ciekawy, jakcoroutines (w Unity3D i być może w innych miejscach) działa. Czy jest nowy wątek? Jednośćdokumentacja oni powiedzieli:

Korekta to funkcja, która może zawiesić swoje wykonanie (wydajność) aż do zakończenia danej YieldInstruction.

I mają przykłady C #tutaj:

using UnityEngine;
using System.Collections;

public class example : MonoBehaviour {
    void Start() {
        print("Starting " + Time.time);
        StartCoroutine(WaitAndPrint(2.0F));
        print("Before WaitAndPrint Finishes " + Time.time);
    }
    IEnumerator WaitAndPrint(float waitTime) {
        yield return new WaitForSeconds(waitTime);
        print("WaitAndPrint " + Time.time);
    }
}

Mam wiele pytań na temat tego przykładu:

W powyższym przykładzie, która linia jest wierszem? JestWaitAndPrint() koronka? JestWaitForSeconds() koronka?

W tej linii:yield return new WaitForSeconds(waitTime);, dlaczego obayield ireturn są obecni? CzytałemDokumentacja jedności że „Deklaracja rentowności jest szczególnym rodzajem zwrotu, który zapewnia, że ​​funkcja będzie kontynuowana z linii po deklaracji rentowności przy następnym wywołaniu”. Jeśliyield jest wyjątkowyreturn, co jestreturn robisz tutaj?

Dlaczego musimy zwrócićIEnumerator?

RobiStartCoroutine rozpocząć nowy wątek?

Ile razy maWaitAndPrint() został wywołany w powyższym przykładzie? Zrobiłyield return new WaitForSeconds(waitTime); naprawdę wrócił? Jeśli tak, to myślęWaitAndPrint() został wywołany dwukrotnie w powyższym kodzie. I myślęStartCoroutine() dzwoniłWaitAndPrint() wiele razy. Widziałem jednakkolejna dokumentacja Unity to mówi: „Wykonanie coroutine może być wstrzymane w dowolnym momencie za pomocą instrukcji yield. Wartość zwrotu wydajności określa, kiedy wznowienie jest wykonywane.” Te słowa sprawiają, że czuję toWaitAndPrint() faktycznie nie wrócił; był tylko wstrzymany; czekał naWaitForSeconds() wracać. Jeśli tak jest, to w powyższym kodzieWaitAndPrint() został wywołany tylko raz iStartCoroutine był odpowiedzialny za uruchomienie funkcji, nie wywołując jej wiele razy.

questionAnswers(1)

yourAnswerToTheQuestion