吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1395|回复: 12
收起左侧

[求助] C#async&await有关的执行顺序导致的错误

[复制链接]
巫人 发表于 2021-8-14 11:22
本帖最后由 巫人 于 2021-8-14 11:29 编辑

请问await是要等待所有主线程的代码执行完毕后再执行么?
[C#] 纯文本查看 复制代码
static SearchOperation()
{
    Initialize();
}

internal static async void Initialize()
{
    var dictionary = await ReadLocalJson<Dictionary<string, List<Dictionary<string, string>>>>(
    RuntimePlatform.WindowsPlayer, Application.streamingAssetsPath + "/Config/Path.json");
    ListConfig = dictionary["AllConfigPath"];
}

internal static async Task<T> ReadLocalJson<T>(RuntimePlatform platform, string url) where T : ICollection
{
    UnityWebRequest unityWebRequest = UnityWebRequest.Get(GetLocalUrl(platform, url));
    await unityWebRequest.SendWebRequest();
    if (unityWebRequest.result == UnityWebRequest.Result.ProtocolError ||unityWebRequest.result == UnityWebRequest.Result.ConnectionError)
    {
        Debug.Log("error=" + unityWebRequest.error);
        throw new Exception("读取JSON文件出错");
    }
    var dictionary = JsonMapper.ToObject<T>(unityWebRequest.downloadHandler.text);
    return dictionary;
}
//使用代码
//ReadUIJson=ReadLocalJson

UIModelCollection.Instance.ReadUIJson(RuntimePlatform.WindowsPlayer,

Application.streamingAssetsPath + "/Config/UIModelConfig/UIPrefabs.json");

GameObject go = Instantiate(UIModelCollection.Instance.LoadGameObject("Button.prefab"));

go.name = "1111";

我这样使用的话他会先遍历ListConfig导致报空错误,就是ReadLocalJson还没执行完就执行了LoadGameObject这个函数,LoadGameObject里做遍历ListConfig操作,结果就是报空错误,请问怎么解决呢?好烦搞了好几天了

如果我后面的遍历ListConfig操作稍等下再做,就能读取完毕,但是现在就得要求立即遍历ListConfig

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wtujoxk 发表于 2021-8-14 11:46
异步改同步
 楼主| 巫人 发表于 2021-8-14 12:14

await unityWebRequest.SendWebRequest();这句必须是异步,同步会暂停卡死,,初始化也得异步,不然也卡死
小白来袭2 发表于 2021-8-14 12:47
Cool_Breeze 发表于 2021-8-14 14:18
就是ReadLocalJson还没执行完【 等待 它执行完成后  task.wiat】执行 LoadGameObject这个函数,
wangsheng66 发表于 2021-8-14 14:27
获取到Initialize的Task对象,在ContinueWith中执行LoadGameObject等方法。
头像被屏蔽
细水流长 发表于 2021-8-14 16:01
提示: 作者被禁止或删除 内容自动屏蔽
wtujoxk 发表于 2021-8-14 17:18
用 Task.Run 改
 楼主| 巫人 发表于 2021-8-15 09:43
wangsheng66 发表于 2021-8-14 14:27
获取到Initialize的Task对象,在ContinueWith中执行LoadGameObject等方法。

这个不行,不知道什么原因还是会卡死
 楼主| 巫人 发表于 2021-8-15 09:46

async&await看看这个?其实实现是一样的就是async语法简单
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 22:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表