网上有很多协程的讲解

但讲到协程返回自定义IEnumerator的却很少

今天看到一个框架里有类似的写法

简单整理如下

public class CustomIEnumerator : IEnumerator
{
    public bool isDone { get; set; } = false;
    public bool MoveNext() { return !isDone; }
    public void Reset() { }
    public object Current => null;
}

private IEnumerator TestCustomIEnumerator()
{
    Debug.Log("TestCustomIEnumerator begin");
    yield return op;
    Debug.Log("TestCustomIEnumerator end");
}

CustomIEnumerator op = new CustomIEnumerator();
StartCoroutine(TestCustomIEnumerator());

 

执行后日志打印顺序如下

1.先打印TestCustomIEnumerator begin

2.停住

3.等到其他地方将op.isDone=true之后随即打印TestCustomIEnumerator end

十分简单清晰

 

关于协程yield return的不同类型网上有很多讲解

包括return数字、null、StartCoroution、WaitForSeconds等等

但介绍return IEnumerator的例子却非常少(注意:IEnumerator就是协程函数定义时的返回类型)

简单讲,return IEnumerator时,IEnumerator对象MoveNext方法返回true就下一帧继续等 返回false协程就执行完了

大概就这么回事儿

 

参考资料

https://gwb.tencent.com/community/detail/117096

https://www.codenong.com/cs110791595/