【发布时间】:2019-10-17 15:34:14
【问题描述】:
在我的代码中,我嵌套了 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
}
有区别,还是相同的行为?
谢谢!
【问题讨论】:
-
我想这会产生一个 IEnumerator
>>,这可能不是你想要的。您可以尝试将类型添加到 IEnumerators 以进行检查吗? (无论如何这是个好主意) -
是的,这将返回 IEnumerator 的 IEnumerator。除非 Unity 支持它(我不认为它支持),否则它不会工作
-
事实上,如果我添加
yield,它会返回IEnumerator<UnityWebRequestAsyncOperation>,IEnumerator<IEnumerator<UnityWebRequestAsyncOperation>>,等等。代码运行没有错误,但我无法真正测试该方法是否真的发送请求(我还没有服务器后端)。但是IEnumerator<T>和IEnumerator<IEnumerator<T>>之间有区别吗? -
@Adassko 这是 Unity 协程特有的。它的工作方式与常规枚举器类似,但协程也有一些特殊的魔力。
-
@Draco18s 是的,我知道 Unity 中的协程。我不确定如果不测试你是否可以在协程中嵌套协程