为什么带有yield的方法永远不会执行?

时间:2015-03-20 18:11:57

标签: c# yield

为什么带有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");

}

2 个答案:

答案 0 :(得分:1)

您没有访问call()返回的Enumerator,因此yield方法不会被执行。

答案 1 :(得分:1)

屈服是懒洋洋地执行的。这意味着它只会在迭代时实际需要时执行:

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