Programmation C sharp/Fonctions asynchrones

Un livre de Wikibooks.

Programmation C#
Programmation C#
Sommaire
Le langage
Programmation avancée
API .Net
Ressources
Modifier ce modèle

L'appel à une fonction se fait de manière synchrone : aucune autre instruction n'est exécutée avant que la fonction ne retourne une valeur. Cependant certaines fonctions prennent beaucoup de temps, en particulier les opérations d'entrées-sorties, et les fonctions de communication par réseau informatique.

Pour ce genre de fonction, l'API .Net possède souvent deux versions de la méthode :

  • Une méthode synchrone qui attend la fin de l'opération avant d'en retourner le résultat,
  • Une méthode asynchrone demandant au pool de threads standard d'effectuer l'opération, puis retourne immédiatement à la méthode appelante.

[modifier] Syntaxe et utilisation des méthodes asynchrones

Une méthode synchrone est déclarée selon la syntaxe suivante :

type_retour nom_methode ( arguments... )

La version asynchrones utilise deux autres méthodes. La première commence par Begin et demande au pool de threads standard d'effectuer l'opération. Une fois l'opération terminée, un delegate est appelé. Celui-ci appelle alors la méthode dont le nom commence par End pour récupérer la valeur retournée par la méthode asynchrone.

Ces deux méthodes ont la syntaxe suivante :

IAsyncResult Beginnom_methode ( arguments_non_ref...,
     AsyncCallback callback, object state )

type_retour Endnom_methode ( IAsyncResult, arguments_ref )

Les arguments de la méthode synchrone se retrouvent répartis entre les deux méthodes :

La méthode Begin possède deux arguments supplémentaires :

  • Un delegate de type AsyncCallback appelé quand l'opération est terminée (celui-ci doit alors appeler la méthode End correspondante),
  • Un objet à transmettre au delegate.

[modifier] Le delegate AsyncCallback

La syntaxe du delegate AsyncCallback est la suivante :

public delegate void AsyncCallback(IAsyncResult result)

Le paramètre result est une interface de type IAsyncResult correspondant à celui retourné par la méthode Begin, et doit être passé à la méthode End.

[modifier] L'interface IAsyncResult

L'interface IAsyncResult possède les propriétés en lecture seule suivantes :

object AsyncState
Cet objet correspond à celui transmis à la méthode Begin.
WaitHandle AsyncWaitHandle
Cet objet de synchronisation est mis dans l'état signalé quand l'opération est terminée.
bool IsCompleted
Ce booléen vaut true (vrai) lorsque l'opération est terminée.
bool CompletedSynchronously
Ce booléen vaut true (vrai) si l'opération s'est terminée de manière synchrone.