Task übergibt wert zu spät

  • C#

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von EaranMaleasi.

    Task übergibt wert zu spät

    Hallo,

    Ich habe ein Problem beim auslesen einer Firebase Datenbank bzw beim übergeben der ausgelesenen Daten in eine Variable.

    Hier ist der Code:

    C#-Quellcode

    1. ​ FirebaseDatabase.DefaultInstance
    2. .GetReference("1").Child(Inputfield1.text)
    3. .GetValueAsync().ContinueWith(task =>
    4. {
    5. if (task.IsFaulted)
    6. {
    7. Debug.Log("Error");
    8. }
    9. else if (task.IsCompleted)
    10. {
    11. snapshot = task.Result;
    12. chk = snapshot.Child("username").Value;
    13. Debug.Log(chk);
    14. }
    15. });
    16. Debug.Log(chk);


    Es ließt zwar die daten richtig aus aber die Variable chk hat im letzten DebugLog keinen Wert und im ersten (also direkt im Task) schon.
    Als würde der obere Code länger brauchen und davor schon der nächste Log ausgegeben.
    Wiederhole ich den Vorgang ein zweites mal passt es plötzlich nur möchte ich das das auf anhieb klappt.

    Bitte um Hilfe.

    C#-Quellcode

    1. private object chk;
    2. public void RegisterUser()
    3. {
    4. if (Inputfield1.text == string.Empty | Inputfield2.text == string.Empty)
    5. {
    6. warningmsg.SetActive(true);
    7. warningmsg1.text = "Please type in a username and Mailadress";
    8. }
    9. else
    10. {
    11. FirebaseDatabase.DefaultInstance
    12. .GetReference("1").Child(Inputfield1.text)
    13. .GetValueAsync().ContinueWith(task =>
    14. {
    15. if (task.IsFaulted)
    16. {
    17. Debug.Log("Error");
    18. }
    19. else if (task.IsCompleted)
    20. {
    21. snapshot = task.Result;
    22. chk = snapshot.Child("username").Value;
    23. Debug.Log(chk);
    24. }
    25. });
    26. Debug.Log(chk);
    27. test();
    28. }
    29. }
    30. public void test()
    31. {
    32. if (chk == null)
    33. {
    34. //mach etwas
    35. }
    36. else
    37. {
    38. //mach etwas anderes
    39. }
    40. }


    Das wäre der code
    ich weiss nicht, was das .ContinueWith() genau macht, und warum du nicht mit Async/Await arbeitest, aber meine Hypothese wäre so:

    C#-Quellcode

    1. private object chk;
    2. public void RegisterUser()
    3. {
    4. if (Inputfield1.text == string.Empty | Inputfield2.text == string.Empty)
    5. {
    6. warningmsg.SetActive(true);
    7. warningmsg1.text = "Please type in a username and Mailadress";
    8. }
    9. else
    10. {
    11. FirebaseDatabase.DefaultInstance
    12. .GetReference("1").Child(Inputfield1.text)
    13. .GetValueAsync().ContinueWith(task =>
    14. {
    15. if (task.IsFaulted)
    16. {
    17. Debug.Log("Error");
    18. }
    19. else if (task.IsCompleted)
    20. {
    21. snapshot = task.Result;
    22. chk = snapshot.Child("username").Value;
    23. }
    24. Debug.Log(chk);
    25. test();
    26. });
    27. }
    28. }
    29. public void test()
    30. {
    31. if (chk == null)
    32. {
    33. //mach etwas
    34. }
    35. else
    36. {
    37. //mach etwas anderes
    38. }
    39. }


    edit: Mit async ungefähr so:

    C#-Quellcode

    1. private object chk;
    2. async public void RegisterUser() {
    3. if (Inputfield1.text == string.Empty | Inputfield2.text == string.Empty) {
    4. warningmsg.SetActive(true);
    5. warningmsg1.text = "Please type in a username and Mailadress";
    6. }
    7. else {
    8. try {
    9. var snapshot = await FirebaseDatabase.DefaultInstance.GetReference("1").Child(Inputfield1.text).GetValueAsync();
    10. chk = snapshot.Child("username").Value;
    11. }
    12. catch { Debug.Log("Error"); }
    13. Debug.Log(chk);
    14. test();
    15. }
    16. }
    17. public void test() {
    18. if (chk == null) {
    19. //mach etwas
    20. }
    21. else {
    22. //mach etwas anderes
    23. }
    24. }
    Ungetestet - und nur in' Notepad gekritzelt

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()