【问题标题】:Why a method with yield never execute? [duplicate]为什么带有 yield 的方法永远不会执行? [复制]
【发布时间】:2015-05-24 06:05:54
【问题描述】:

为什么带有 yield 的方法永远不会执行?永远无法达到 Debug.Log o 首次调用方法!

public IEnumerator call(string method,WWWForm postData,Action<string> callback) {

    Debug.Log("call");

    WWW www = new WWW(this.apiUrl + method,postData);

    yield return www;

    Debug.Log("www ok");

    callback(www.text);


}

public IEnumerator call2(string method,WWWForm postData,Action<string> callback) {

    Debug.Log("call2");
    return null;

}

public void login(string email,string password,Action<string> callback)
{
    Debug.Log("login");

    WWWForm form = new WWWForm();
    form.AddField("email",email);
    form.AddField("password",password);

    Debug.Log("->playerLogin");

    this.call2("playerLogin", form,callback);
    this.call("playerLogin", form,callback);

    Debug.Log("<-playerLogin");

}

【问题讨论】:

  • 你永远不会迭代call返回的IEnumerator,所以代码不会运行。
  • Answer to stackoverflow.com/questions/13424485/… 涵盖了迭代器何时执行(问题有点不同,询问为什么某些代码永远不会运行,但答案涵盖了两者)。

标签: c# yield


【解决方案1】:

yield 延迟执行。这意味着它只会在实际需要时执行,即迭代时:

var enumerable = this.call("playerLogin", form,callback);
enumerable.GetEnumerator().MoveNext(); // will be executed here

【讨论】:

    【解决方案2】:

    你没有访问 call() 返回的 Enumerator,所以 yield 方法没有被执行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-17
      • 2015-01-18
      • 1970-01-01
      • 2012-12-09
      • 2016-08-04
      • 1970-01-01
      相关资源
      最近更新 更多