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).