Я не знаю, связана ли моя ошибка с плохим пониманием метода или с неправильной реализацией. Я надеюсь, что вы, ребята, можете мне помочь.
private bool CheckIfFieldExists(string toSearch, string type) {
bool doesFieldExist = false;
if (type == "username") {
Task t = playerDataDB.Child("Player").Child(toSearch).GetValueAsync().ContinueWith(task => {
if (task.IsFaulted) {
Debug.Log("Task was faulted: Pulling from database");
return;
}
else if (task.IsCompleted) {
DataSnapshot snap = task.Result;
if (snap.Exists) {
Debug.Log("field exists");
doesFieldExist = true;
} else {
Debug.Log("field doesnt exist");
return;
}
}
});
TimeSpan ts = TimeSpan.FromMilliseconds(1000);
t.Wait(ts);
Debug.Log("returning field status");
return doesFieldExist;
} else {
return false;
}
}
Эта функция используется для проверки наличия поля в моей базе данных. Цель состоит в том, чтобы использовать задачу для извлечения данных в виде DataSnapshot, перебора этого снимка, чтобы увидеть, существует ли поле, и возврата логического значения в зависимости от результата. Моя проблема в том, что «возвращение статуса поля» отлаживается до того, как «поле существует / не существует». Почему это? Я предполагаю, что это потому, что задачи работают асинхронно и требуется слишком много времени для завершения sh, поэтому остальная часть кода выполняется до того, как это будет выполнено. Как я могу дождаться завершения задачи, прежде чем продолжить работу с каким-либо другим кодом? 1006 *
private async Task<bool> CheckIfFieldExists(string toSearch, string type) {
if (type == "username") {
DataSnapshot snap = await playerDataDB.Child("Player").Child(toSearch).GetValueAsync();
if (snap.Exists) {
return true;
}
else {
return false;
}
} else if (type == "email") {
DataSnapshot snap = await userAccountDB.Child("Users").Child(toSearch.Remove(toSearch.IndexOf("@"))).Child("email").GetValueAsync();
if (snap.Exists) {
return true;
} else {
return false;
}
} else {
return false;
}
}
Помните, что если ваше намерение сравнивает задачу, возвращенную с другим bool, вам необходимо сделать включающий метод asyn c, чтобы вы могли ожидать параметр if-statement. Без этого он не будет компилироваться, так как Task! = Bool.