Vue d'ensemble de la programmation asynchrone

Guide du développeur .NET Framework 
Vue d'ensemble de la programmation asynchrone 

Une opération asynchrone qui utilise le modèle de design IAsyncResult est implémentée sous la forme de deux méthodes nommées BeginOperationName et EndOperationName qui commencent et terminent respectivement l'opération asynchrone OperationName. Par exemple, la classe FileStream fournit les méthodes BeginRead et EndRead pour lire, de façon asynchrone, des octets à partir d'un fichier. Ces méthodes implémentent la version asynchrone de la méthode Read.

Après avoir appelé BeginOperationName, une application peut continuer à exécuter les instructions sur le thread appelant pendant que l'opération asynchrone s'exécute sur un thread différent. Pour chaque appel à BeginOperationName, l'application doit également appeler EndOperationName afin d'obtenir les résultats de l'opération.

Début d'une opération asynchrone

La méthode BeginOperationName commence l'opération asynchrone OperationName et retourne un objet qui implémente l'interface IAsyncResult. Les objets IAsyncResult stockent les informations relatives à une opération asynchrone. Le tableau suivant affiche les informations relatives à une opération asynchrone.

 
Membre Description

AsyncState

Objet facultatif spécifique à l'application contenant les informations relatives à l'opération asynchrone.

AsyncWaitHandle

WaitHandle pouvant être utilisé pour bloquer l'exécution de l'application jusqu'à ce que l'opération asynchrone se termine.

CompletedSynchronously

Valeur indiquant si l'opération asynchrone s'est terminée sur le thread utilisé pour appeler BeginOperationName plutôt que sur un thread ThreadPool séparé.

IsCompleted

Valeur indiquant si l'opération asynchrone est terminée.

Une méthode BeginOperationName accepte tous les paramètres déclarés dans la signature de la version synchrone de la méthode qui sont passés par valeur ou par référence. Aucun des paramètres out ne fait partie de la signature de méthode BeginOperationName. La signature de méthode BeginOperationName inclut également deux paramètres supplémentaires. Le premier de ces deux paramètres définit un délégué AsyncCallback qui fait référence à une méthode appelée lorsque l'opération asynchrone se termine. L'appelant peut spécifier null (Nothing en Visual Basic) s'il ne souhaite pas qu'une méthode soit appelée lorsque l'opération se termine. Le deuxième paramètre supplémentaire est un objet défini par l'utilisateur. Cet objet peut être utilisé pour passer des informations d'état spécifiques à l'application à la méthode appelée lorsque l'opération asynchrone se termine. Si une méthode BeginOperationName accepte des paramètres supplémentaires correspondant à l'opération, tels qu'un tableau d'octets pour stocker des octets lus à partir d'un fichier, AsyncCallback et l'objet d'état de l'application sont les derniers paramètres dans la signature de méthode BeginOperationName.

Begin (début) OperationName retourne immédiatement le contrôle au thread appelant. Si la méthode BeginOperationName lève des exceptions, les exceptions sont levées avant le lancement de l'opération asynchrone. Si la méthode BeginOperationName lève des exceptions, la méthode de rappel n'est pas appelée.

Fin d'une opération asynchrone

La méthode EndOperationName termine l'opération asynchrone OperationName. La valeur de retour de la méthode EndOperationName a le même type que celui retourné par son équivalent synchrone et est spécifique à l'opération asynchrone. Par exemple, la méthode EndRead retourne le nombre d'octets lus à partir d'un FileStream et la méthode EndGetHostByName retourne un objet IPHostEntry contenant des informations à propos d'un ordinateur hôte. La méthode EndOperationName accepte tout paramètre out ou ref déclaré dans la signature de la version synchrone de la méthode. Outre les paramètres de la méthode synchrone, la méthode EndOperationName inclut également un paramètre IAsyncResult. Les appelants doivent passer l'instance retournée par l'appel correspondant à BeginOperationName.

Si l'opération asynchrone représentée par l'objet IAsyncResult n'est pas terminée lorsque la méthode EndOperationName est appelée, EndOperationName bloque le thread appelant jusqu'à la fin de l'opération asynchrone. Les exceptions levées par l'opération asynchrone sont levées à partir de la méthode EndOperationName. Les conséquences de plusieurs appels à la méthode EndOperationName avec le même IAsyncResult ne sont pas définies. De même, l'appel de la méthode EndOperationName avec un IAsyncResult qui n'a pas été retourné par la méthode Begin associée n'est pas non plus défini.

RemarqueRemarque

Pour l'un ou l'autre de ces scénarios indéfinis, les implémenteurs doivent envisager la levée d'une InvalidOperationException.

RemarqueRemarque

Les implémenteurs de ce modèle de design doivent informer l'appelant que l'opération asynchrone est terminée en affectant la valeur true à IsCompleted, en appelant la méthode de rappel asynchrone (si une méthode a été spécifiée) et en signalant le AsyncWaitHandle.

Les développeurs d'applications ont plusieurs choix de design pour accéder aux résultats de l'opération asynchrone. Le choix correct varie selon que l'application possède ou non des instructions pouvant être exécutées pendant que l'opération se termine. Si une application ne peut pas exécuter de tâches supplémentaires avant de recevoir les résultats de l'opération asynchrone, elle doit se bloquer jusqu'à ce que les résultats soient disponibles. Pour bloquer l'application jusqu'à ce qu'une opération asynchrone se termine, vous pouvez utiliser l'une des approches suivantes :

Les applications qui n'ont pas besoin de se bloquer pendant que l'opération asynchrone se termine peuvent utiliser l'une des approches suivantes :

Voir aussi


Ces informations proviennent du site de http://msdn2.microsoft.com
Source de cette page : http://msdn2.microsoft.com/fr-fr/library/ms228963.aspx

Réseaux sociaux

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher les interactions avec les réseaux sociaux sur ces pages.

 

Nuage de mots clés

8 mots clés dont 0 définis manuellement (plus d'information...).

Avertissement

Cette page ne possède pas encore de mots clés manuels, ceci est donc un exemple automatique (les niveaux de pertinence sont fictifs, mais les liens sont valables). Pour tester le nuage avec une page qui contient des mots définis manuellement, vous pouvez cliquer ici.

Vous pouvez modifier vos préférences dans votre profil pour ne plus afficher le nuage de mots clés.

 

Astuce pour imprimer les couleurs des cellules de tableaux : http://www.gaudry.be/ast-rf-450.html
Aucun commentaire pour cette page

© Ce document issu de l′infobrol est enregistré sous le certificat Cyber PrInterDeposit Digital Numbertection. Enregistrement IDDN n° 5329-5066
Document créé le 30/10/06 03:09, dernière modification le Vendredi 17 Juin 2011, 12:11
Source du document imprimé : http://www.gaudry.be/dotnet-rf-ms228963.html Document affiché 11 fois ce mois de Mai.
St.Gaudry©07.01.02
Outils (masquer)
||
Recherche (afficher)
Recherche :

Utilisateur (masquer)
Navigation (masquer)
Apparence (afficher)
Stats (afficher)
15832 documents
452 astuces.
549 niouzes.
3099 definitions.
447 membres.
8115 messages.

Document genere en :
0,95 seconde

Mises à jour :
Mises à jour du site
Citation (masquer)
La mort est un état de non-existence. Ce qui n'est pas n'existe pas. Donc la mort n'existe pas.

Woody Allen
 
l'infobrol
Nous sommes le Jeudi 31 Mai 2012, 18:43, toutes les heures sont au format GMT+1.00 Heure, heure d'été (+1)