2009-09-03 6 views
0

J'essaie d'appeler deux méthodes (l'une est un service Web, l'autre est une méthode qui permet de connecter un utilisateur à la page d'accueil) de manière asynchrone. Je n'ai pas besoin d'eux pour retourner une valeur, car la méthode webservice est simplement utilisée pour la journalisation et l'autre a du code pour authentifier l'utilisateur et se connecter à la page d'accueil. Je suis sur asp.NET 2.0L'appel de deux méthodes de manière asynchrone dans ASP.NET 2.0

J'ai essayé de lire de nombreux articles qui suggéraient d'utiliser des delagates etc ... mais je n'ai jamais travaillé dessus. Est-ce que quelqu'un peut m'aider avec ça. J'apprécierai ça.

+0

Vous n'avez pas besoin de renvoyer un succès ou un échec pour l'authentification? – Martin

+0

hmm je n'ai pas besoin de retourner une valeur, en fait, les deux méthodes ont déjà le code qui prendra soin d'autres choses. J'ai juste besoin d'appeler ces méthodes asynchronoulsy. désolé si je vous ai confondu. –

Répondre

2

Si vous voulez juste « feu et oublier », alors vous pouvez simplement la file d'attente des éléments de travail de la piscine de fil:

WaitCallback firstAction = delegate { webService.LogAccess(); }; 
WaitCallback secondAction = delegate { user.Login(); } 

ThreadPool.QueueUserWorkItem(firstAction); 
ThreadPool.QueueUserWorkItem(secondAction); 
1

si vous n'avez pas besoin d'attendre les résultats que vous pouvez utiliser la méthode ThreadPool.QueueUserWorkItem comme Jon a suggéré

si vous devez passer un argument dans votre méthode

string msg = "log message"; 
WaitCallback firstAction = delegate(object args) 
{ 
    string s = ((object[])args)[0]; 
    webService.LogAccess(s); 
}; 
ThreadPool.QueueUserWorkItem(firstAction, new object[] {msg}); 

je vais généralement configurer une autre méthode appelée LogAsync pour gérer l'ensemble de la cérémonie

void LogAsync(string msg) 
{ 
    WaitCallback firstAction = delegate(object args) 
    { 
    string s = ((object[])args)[0]; 
    webService.LogAccess(s); 
    }; 
    ThreadPool.QueueUserWorkItem(firstAction, new object[] {msg}); 
} 
+0

Si vous êtes sur le point de mettre en file d'attente la requête de toute façon, pourquoi utiliseriez-vous un argument faiblement typé au lieu de simplement la variable capturée? Vous devez déjà avoir la valeur, après tout ... –

+0

Jon/ObeseCoder, j'ai essayé d'utiliser le délégué, et il dit "Expression attendue". je l'ai utilisé quelque chose comme ça dans ma méthode principale: WaitCallback FirstAction = délégué (AuthenticatePRONET) WaitCallback SecondAction = délégué (LoginUserAfterAuthenticate) ThreadPool.QueueUserWorkItem (AuthenticatePRONET) ThreadPool.QueueUserWorkItem (LoginUserAfterAuthenticate) où AuthenticatePRONET, LoginUserAfterAuthenticate sont mes deux méthodes. Désolé si je fais quelque chose de mal syntaxiquement, je suis totalement nouveau à ce concept. pouvez-vous s'il vous plaît élaborer ... –

Questions connexes