TaskCompletionSource Fundamentals in C#

Salut! Today nous parlerons du TaskCompletionSource en C#, il peut vous être méconnu mais très utile et pour certain connu mais de manière un peu plus abstraites, le TaskCompletionSource encapsuler une Task normale en permettant cette-fois ci de contrôler cette dernière et de transformer des API ou Librairie orienté évènement en tache asynchrone.

Comme dit ci-haut la TaskCompletionSource nous permet par des méthodes qui lui sont propre de contrôler la durée de vie et l’achèvement d’une Task (charge de travail) asynchrone qui lui est attribuer.

Voici les méthodes : SetResult, SetException, SetCancel et leurs extension Try.

La TaskCompletionSource est utiliser dans divers scénarios mais a tout de même une utilité de prédilection, donc pour illustrer tout ça nous allons :

  1. Implémenter quelques petites fonctions fondamentales sur la TCS [Partie 1]
  2. Démontrer comment créer ses propres fonctions awaitable (async/await) et comment transformer encapsuler des évènements en Task asynchrone (utilité majeur du TCS) [Partie 2]

Let’s go

Cette atelier se passera en 2 parties, la première ou nous allons démontrer le fonctionnement fondamental du TaskCompletionSource et la seconde partie comment transformer une API basé sur les évènements en Tâche(Task) asynchrone.

Première Partie : Fonctionnement fondamental du TaskCompletionSource

  1. Donc pour commencer créons notre une application Console nommé « TaskCompletionSourceSample»

  1. Dans notre classe « Program » ajouter une fonction statique asynchrone nommé « TaskProcessResult »

  1. Dans notre classe « Program » ajouter une fonction statique asynchrone nommé « TaskProcessException »

  1. Dans notre classe « Program » ajouter une fonction statique asynchrone nommé « TaskProcessCanceled »

Alors expliquons un peu ces fonctions, elles sont vraiment similaires sauf qu’il y a juste quelques petits changements, en général voilà comment est fait le code,

  1. Premièrement on déclare et instancie une TCS qui nous retournera une Task, qui à son tour retournera comme résultat final une integer.
  2. Nous démarrons une StopWatch qui nous permettra de chronométrer nos exécutions.
  3. Avec un Task.Delay(2000) nous simulons une opération I/O qui s’exécute durant 2000 ms
  4. Et après ce processus nous changeons le statut de la tâche ou encore nous mettons fin à cette tache grâce au méthode du TCS énumérer ci-haut.

Donc comme résultat du TaskProcessResult nous avons :

Donc comme résultat du TaskProcessException nous avons :

Voici quelques graphes qui clarifierons un peu plus toute cette logique :

Et voilà tout pour cette article, la seconde partie dans un prochain article.

Check Also

Unmanaged and Managed Code : Introduction

Salut, Dans cette série d’article Managed and Unmanaged Code, nous parlerons beaucoup plus de l’interopérabilité …

One comment

  1. Super Cool.. Bravo

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *