C#async&await有关的执行顺序导致的错误
本帖最后由 巫人 于 2021-8-14 11:29 编辑请问await是要等待所有主线程的代码执行完毕后再执行么?
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
异步改同步
await unityWebRequest.SendWebRequest();这句必须是异步,同步会暂停卡死,,初始化也得异步,不然也卡死 你这代码也看不出来啊 就是ReadLocalJson还没执行完【 等待 它执行完成后task.wiat】执行 LoadGameObject这个函数, 获取到Initialize的Task对象,在ContinueWith中执行LoadGameObject等方法。 用 Task.Run 改 wangsheng66 发表于 2021-8-14 14:27
获取到Initialize的Task对象,在ContinueWith中执行LoadGameObject等方法。
这个不行,不知道什么原因还是会卡死{:301_971:} wtujoxk 发表于 2021-8-14 17:18
用 Task.Run 改
async&await看看这个?其实实现是一样的就是async语法简单
页:
[1]
2