在我的代码中,我嵌套了IEnumerator方法,例如:

    private IEnumerator PerformRequest(string url) {

        // Doing stuff

        UnityWebRequest request = UnityWebRequest.Get(url);
        yield return request.SendWebRequest();

        // Doing stuff
    }

    private IEnumerator PerformRequest2(string url) {

        // Doing stuff

        return PerformRequest(url);

        // Doing stuff
    }

    public IEnumerator PerformRequest3(string url) {

        // Doing stuff

        return PerformRequest2(url);

        // Doing stuff
    }


我想知道如果在上层方法中添加yield有什么区别,例如:

    private IEnumerator PerformRequest(string url) {

        // Doing stuff

        UnityWebRequest request = UnityWebRequest.Get(url);
        yield return request.SendWebRequest();

        // Doing stuff
    }

    private IEnumerator PerformRequest2(string url) {

        // Doing stuff

        yield return PerformRequest(url);

        // Doing stuff
    }

    public IEnumerator PerformRequest3(string url) {

        // Doing stuff

        yield return PerformRequest2(url);

        // Doing stuff
    }


有区别,还是相同的行为?

谢谢 !

最佳答案

当然可以

我自己之前已经做过类似的事情,您绝对可以使用yield一种它自己生成的方法,因为发生的事情是执行是完全线性的,并且当PerformRequest产生并返回一些值时(Web请求,但实际上不是重要信息)传播到yield return...中的PerformRequest2,然后向上传播到PerformRequest3。 Unity会很好地在正确的位置恢复执行(您也可以通过测试来回答自己的问题;)。

基本上与其他任何嵌套函数相同,例如

int GetValue() {
    return 4;
}

int GetValue2() {
    return GetValue();
}


与执行完全相同(只是使用不同的类型):

IEnumerator GetValue() {
    return new SomeIEnumerator();
}

IEnumerator GetValue2() {
    return GetValue();
}


转换为协程产量(yield只是一个特殊的关键字,它不影响返回类型!):

IEnumerator GetValue() {
    yield return new SomeIEnumerator();
}

IEnumerator GetValue2() {
    yield return GetValue();
}


您也可以这样做,但是我通常在其中找不到任何价值:

IEnumerator GetValue() {
    yield return new SomeIEnumerator();
}

IEnumerator GetValue2() {
    //other stuff, with yield so our function still returns a value
    StarCoroutine(GetValue());
    //this stuff runs without waiting
}


Adassko还发现了有关协程和嵌套协程的this great tutorial

关于c# - Unity C#嵌套IEnumerator,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58436172/

10-17 02:23