Magazine Internet

[WF4] Créer une Activité asynchrone

Publié le 08 février 2010 par Jeremy.jeanson

Avant de commencer à viouloir créer une activité asynchrone, il faudrait déjà savoir quand elle est utile…

Cette remarque peut sembler idiote, mais en fait une activité héritant de AsyncCodeActivity sert en fait à manipuler des objets disposant de méthode asynchrones retournant un IAsyncResult Hors de ce contexte, passez votre chemin, ou alors implémentez ce genre de méthodes dans votre code asynchrone.

L’ AsyncCodeActivity est une classe abstraite disposant de deux méthode importante :

  • BeginExecute - dans laquelle vous allez manipuler un objet exploitant IAsyncResult (WebRequest, FileStream …etc…)
  • EndExecute – dans laquelle vous allez traiter le résultat obtenu.

Toutes deux permetent de manipuler un contexte particulier AsyncCodeActivityContext  qui contient notre l’objet que l’on manipule (context.UserState).

Voici un petit exemple en considérant que l’on utilise un objet MonObjet qui a deux méthode BeginJob et EndJob exploitant un IAsyncResult.

C#

public sealed class MyAsyncCodeActivity: AsyncCodeActivity
{
    protected override IAsyncResult BeginExecute(AsyncCodeActivityContext context, AsyncCallback callback, object state)
    {
        // Instanicer l’objet
        MonObjet o = new MonObjet();

        // Stocker l’objet dans le context
        context.UserState = o;

        // Lancer le job
        return file.BeginJob(callback, state);
    }

    protected override void EndExecute(AsyncCodeActivityContext context, IAsyncResult result)
    {
        // Retrouver notre objet
        MonObjet o = context.UserState as MonObjet;
        
        // Fin duJob
        o.EndJob(result);
    }
}

Note : Si votre activité hérite de AsyncCodeActivity<TResult>, la méthode EndExecute permet de retourner le résulta de la méthode (return TResult).


Retour à La Une de Logo Paperblog

A propos de l’auteur


Jeremy.jeanson 1573 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte