You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何先调用的协程(Coroutine)会晚于普通函数执行?

问题原因

Unity的StartCoroutine不会阻塞主线程,你调用StartCoroutine(checkClass(studentId))后,主线程会立刻执行后续的print和JoinClass方法,而checkClass里的网络请求要等yield return w完成后才会给classCheckList赋值,这就导致JoinClass执行时classCheckList还没被正确初始化,自然会先跑起来。

解决办法

把OnJoinClass改成协程,用yield return等待checkClass执行完毕后再调用JoinClass:

修改后的OnJoinClass协程

public IEnumerator OnJoinClass()
{
    // 等待checkClass协程完全执行结束
    yield return StartCoroutine(checkClass(studentId));
    print(classCheckList.Length);
    JoinClass(studentId, InputClassCode.text);
    print("succes");
}

然后把原来调用OnJoinClass的地方改成启动这个协程,比如按钮点击事件:

// 替换原来直接调用OnJoinClass()的代码
StartCoroutine(OnJoinClass());
额外优化建议
  1. JoinClass里的WWW请求也是异步操作,同样建议改成协程,避免后续逻辑出现类似顺序问题:
public IEnumerator JoinClass(string id_Student, string id_Class)
{
    isJoined = false;
    for (int i = 0; i < classCheckList.Length; i++)
    {
        print(classCheckList[i] + "==" + id_Class + "\n");
        if (classCheckList[i] == id_Class)
        {
            print(classCheckList[i]);
            isJoined = true;
            break; // 找到匹配项后直接跳出循环,提升效率
        }
    }

    if (!isJoined)
    {
        WWWForm form = new WWWForm();
        form.AddField("addStudentId", id_Student);
        form.AddField("addClassId", id_Class);

        WWW www = new WWW(URL4, form);
        yield return www; // 等待请求完成
        // 可在此处理请求结果
        if(string.IsNullOrEmpty(www.error))
        {
            print("加入班级成功");
        }
        else
        {
            print("加入班级失败:" + www.error);
        }
    }
    else
    {
        print("Sudah Masuk Kelas");
    }
}

此时OnJoinClass里调用JoinClass也要改成等待:

public IEnumerator OnJoinClass()
{
    yield return StartCoroutine(checkClass(studentId));
    print(classCheckList.Length);
    yield return StartCoroutine(JoinClass(studentId, InputClassCode.text));
    print("success");
}
  1. 提前初始化classCheckList,避免空引用异常:
private string[] classCheckList = new string[0];

内容的提问来源于stack exchange,提问作者Tirtaodd997

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 00:33:11