2009-11-22 5 views
0

J'essaie d'utiliser async du futur asp.net mvc, en utilisant mon propre délégué asynchrone. Je n'ai pas compris comment le faire fonctionner. Voici le code:MVC futures async avec un délégué personnalisé

public delegate String GetString(); 
    public String getHello() { return "Hello"; } 

    public IAsyncResult BeginHello(AsyncCallback cb, Object state) 
    { 
     GetString dlgt = getHello; 
     return dlgt.BeginInvoke(cb, state); 
    } 

    public ActionResult EndHello(IAsyncResult asyncResult) 
    { 
     return View(); 
    } 

En EndHello, asyncResult.IsCompleted = True, mais asyncResult.AsyncState == null. Je m'attendais à avoir AsyncState == "Bonjour".

Qu'est-ce qui me manque?

Aussi, est-il même logique de l'organiser de cette façon? Ou est-ce que cela l'amène à utiliser le même pool de threads de toute façon? Fondamentalement, ma pensée était de mettre un lecteur de données dans ma fonction asynchrone, pensant que je pourrais faire une boucle sur le lecteur remplissant une collection d'objets et ne reviendra que quand ils sont terminés. Est-il préférable d'utiliser BeginExecuteReader et de remplir les objets sur le thread principal?

EDIT: Pour quiconque lit ceci plus tard, c'est en fait la mauvaise façon de le faire, et ne vous aidera pas du tout. BeginExecuteReader est le chemin à parcourir.

Répondre

0

Vous ne recevrez pas Bonjour dans AsyncState.

Bonjour sera retourné lorsque vous faites un EndInvoke().

par exemple. Voici le code que vous devez utiliser:

public String EndHello(IAsyncResult asyncResult)  
{   
    GetString getStringDel = (asyncResult as AsyncResult).AsyncDelegate as GetString; 
    return getStringDel.EndInvoke(asyncResult); 
} 

Vous pouvez consulter:

lien MSDN Calling Synchronous Methods Asynchronously

répondre SO à What is AsyncCallback?

+0

Merci! Maintenant j'ai juste besoin de faire des tests avec wcat et voir si c'est vraiment une bonne idée :) – DennisP

Questions connexes