Présentation des fonctionnalités de développement asynchrone avec .NET et C#

Qu’est-ce qu’une tâche asynchrone

L’un des grands concepts dans le monde du développement avec un grand D est le concept d’exécution synchrone et asynchrone de votre code.

En quelques mots, un code dit asynchrone signifie que son exécution est non bloquante et permet que le flot principal du programme continue de s’exécuter.

Précédemment, j’ai mentionné qu’il s’agissait d’un des grands concept du développement car il sous-entend d’autre concepts reliés à la programmation multithread. Parmi ces concepts, il y a l’attente active (Polling), les fonctions de rappel (callback), Threads et une panoplie d’algorithmes non-bloquants.

Asynchronicité et .NET 4.5

La version 4.5 de .NET apporte deux nouveaux mot clés : async et await.

Ils viennent remplacer la technique qui consistait à invoquer la fonction de démarrage de tâche, exécuter le code en question et déclarer un delegate de retour. Le tout pouvait être assez difficile à suivre dans une majorité de cas.

C’est alors que async et await viennent entrer en jeu lorsqu’il va venir être temps d’avoir des appels asynchrone dans son flux d’exécution. Un exemple typique ressemble à ceci (Tiré de MSDN mais simplifié):


async Task<int> AccessTheWebAsync()
{
HttpClient client = new HttpClient();
Task<string> getStringTask = client.GetStringAsync("http://msdn.microsoft.com");
GrosseEtLongueTache();
string urlContents = await getStringTask;
return urlContents.Length;
}

view raw

gistfile1.cs

hosted with ❤ by GitHub

Quelques points intéressants son à noter :

  • La fonction est async car le mot clé est présent dans la signature de celle-ci.
  • Le type de retour est Task<T>.
  • Un appel à une fonction GetStringAsync() avec un type de retour Task<T> est fait.
  • getStringTask est précédé mot clé await avant d’être invoqué.

Le point à retenir dans le scénario présenté est qu’il est facile de concevoir et de comprendre l’ordre d’exécution de celui-ci. Le code va exécuter client.GetStringAsync(« http://msdn.microsoft.com &raquo;) sans, toutefois, attendre son retour avant d’entreprendre l’exécution de GrosseEtLongueTache().

Il est aussi à noter que le type de retour doit être obligatoirement Task<T> avec votre type de retour. Si vous avez une fonction qui retourne rien du tout alors vous devez retourner simplement Task.

API utilisant async

Au moment d’écrire ce billet, il y a une dizaine d’API dans le framework qui exposent des fonctionnalités async. Un drôle de hazard (!) a fait en sorte que ce sont des fonctionnalités où vous devez attendre, dans bien des cas, un peu pour avoir le résultat de l’opération.

Dans le lot, il y a les classes suivantes :

Conclusion

Le bonheur de tout cela est que la conversion de votre code s’exécutant en mode synchrone en mode asynchrone est très simple. Le double avantage réside dans le fait que, dans certains cas, la performance perçue sera augmentée car votre thread principal ne sera pas toujours en attente de vos opérations plus longue à exécuter.

Si vous avez accès à .NET 4.5 et que vous avez accès à ces nouveaux APIs, n’attendez pas que le train passe devant vous et utilisez-les dès maintenant. Vous en ressentirez les effets assez rapidement.

Publicité

Auteur : Pascal Paradis

Je suis les mains et le cerveau derrière http://frenchcoding.com. Je développe des microservices chez @UbisoftMTL. Amateur de Hockey et j'aime la technologie, en général.

2 réflexions sur “Présentation des fonctionnalités de développement asynchrone avec .NET et C#”

Laisser un commentaire

Entrer les renseignements ci-dessous ou cliquer sur une icône pour ouvrir une session :

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

%d blogueueurs aiment cette page :