gpt4 book ai didi

c# - 如何在带有 Firebase 的 Unity 中使用异步

转载 作者:行者123 更新时间:2023-11-30 12:55:30 26 4
gpt4 key购买 nike

所以我正在尝试在我的 Unity 项目中使用 Firebase,我从来没有做过任何与异步相关的事情,而且我不明白如何解决这个问题。

public DatabaseData GetData()
{
DatabaseData data = new DatabaseData();
reference.GetValueAsync().ContinueWith(task =>
{
if (task.IsFaulted)
{
Debug.Log("error");
}
else if (task.IsCompleted)
{
DataSnapshot snapshot = task.Result;
// Do something with snapshot...
Debug.Log("hit");
}
});
return data;
}

所以我尝试跟踪函数中发生的事情,并注意到它在命中 Debug.Log("hit") 之前返回,这导致返回一个空变量。
我尝试四处搜索并看到人们使用协同程序,但这不会让我返回任何数据。

最佳答案

我知道我迟到了,但万一其他人像我一样偶然发现了这个:

感谢@Jesper 提供的链接,它非常有帮助,我鼓励大家阅读它,但是如果您正在寻找快速修复,这里是我如何使用从中获得的信息重写上面的示例Jesper 的链接。

public async Task GetData()
{
DatabaseData data = new DatabaseData();
await reference.GetValueAsync().ContinueWith(task =>
{
if (task.IsFaulted)
{
Debug.Log("error");
}
else if (task.IsCompleted)
{
DataSnapshot snapshot = task.Result;
// Do something with snapshot...
Debug.Log("hit");
GLOBAL_VAR_DATA = data;
}
});
return;
}

这将导致程序暂停并等待 getValueAsync 完成其任务,然后再继续。此外,它现在从 getValueAsync 返回任务而不是数据。这将必须在全局范围内存储并在其他地方检索。你会像这样使用它:

await GetData();
data = GLOBAL_VAR_DATA;

等待 GetData 完全解析,然后从全局变量中拉取数据。如果成功,GLOBAL_VAR_DATA 就有你想要的数据,此时可以取回。

关于c# - 如何在带有 Firebase 的 Unity 中使用异步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48585136/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com