Смешивание асинхронного ожидания и блокировки вызовов может вызвать проблемы.
Ссылка Асинхронное / ожидание - Лучшие практики асинхронного программирования
Используйте обработчик асинхронных событий, если код не может быть подвергнут рефакторингу для полной асинхронности
void Start () {
started += onStarted;
started(this, EventArgs.Empty);
}
event EventHandler started = delegate { }
private async void onStarted(object sender, EventArgs args) {
started -= onStarted;
User user = await GetUserAsync("213asdasd");
Debug.Log(user.email);
}
Также код должен следовать асинхронному шаблону
public async Task<User> GetUserAsync (string id) {
User user = new User();
try {
DataSnapshot snapshot = await FirebaseDatabase.DefaultInstance
.GetReference("Users").Child(id).GetValueAsync();
string rawUserData = snapshot.GetRawJsonValue();
Debug.Log(rawUserData);
user = JsonUtility.FromJson<User>(rawUserData);
} catch(Exception ex) {
// Handle the error...
}
return user;
}