2012-09-11 3 views
0
public User Login(User user) 
    { 
     User responseUser = null; ; 
     parse.Users.Login<User>("hello", "99999", r => 
      { 
       if (r.Success) { responseUser = r.Data; } 
      }); 
     return responseUser; 
    } 

Pourquoi retourner réponseUser est null mais r.Data n'est pas null? Je vous remercie!!!C# comment traiter la fonction de rappel

Répondre

1

Vous ne nous avez pas dit comment fonctionne la fonction parse.Users.Login<User> mais il semble qu'elle soit asynchrone. Cela signifie qu'il reviendra immédiatement et que le rappel sera appelé beaucoup plus tard. Donc, vous renverrez null de la fonction principale.

Vous devez modifier la fonction de connexion pour qu'il fonctionne avec un rappel ainsi:

public void Login(User user, Action<User> action) 
{ 
    User responseUser = null; 
    parse.Users.Login<User>("hello", "99999", r => 
    { 
     if (r.Success) 
     { 
      action(r.Data); 
     } 
     else 
     { 
      action(null); 
     } 
    }); 
} 
+0

La fonction de connexion est API tiers, je ne peux pas le modifier – user1070827

+0

je crains qu'il n'y a pas grand-chose vous pourriez faire à ce sujet. Vous appelez une méthode asynchrone à l'intérieur et vous ne pouvez pas vous attendre à avoir le résultat immédiatement. Il y a un hack en utilisant 'ManualResetEvent' pour bloquer le thread principal pendant que l'appel asynchrone est en cours d'exécution mais c'est tellement horrible que je ne vais même pas donner l'exemple car c'est une approche complètement fausse. Ping-moi si vous voulez voir cette solution après tout. –

Questions connexes