Le code asynchrone devient de plus en plus populaire pour l'Ă©criture d'applications rĂ©actives. Malheureusement, la programmation asynchrone prĂ©sente Ă©galement des difficultĂ©s supplĂ©mentaires. Par consĂ©quent, comprendre le fonctionnement de ce code peut ĂȘtre une tĂąche ardue, quelle que soit votre expĂ©rience. Si vous commencez tout juste avec du code asynchrone ou si vous souhaitez rafraĂźchir votre comprĂ©hension, ceci est une introduction au monde de la programmation asynchrone!
Qu'est-ce que le code asynchrone?
La programmation asynchrone vous permet d'exĂ©cuter un bloc de code sans arrĂȘter (ou bloquer) tout le thread dans lequel l'action est exĂ©cutĂ©e. Un mythe courant sur le code asynchrone est qu'il amĂ©liore les performances, ce qui n'est pas toujours vrai. Au lieu de cela, la principale caractĂ©ristique de la programmation asynchrone est qu'elle augmente le nombre de tĂąches (bande passante) qui peuvent ĂȘtre effectuĂ©es simultanĂ©ment, sans avoir Ă bloquer le thread dans lequel ces actions sont effectuĂ©es.
Vous pourriez penser que le code asynchrone est trĂšs similaire au code multithread, aprĂšs tout, de nombreuses mĂ©thodes peuvent ĂȘtre exĂ©cutĂ©es simultanĂ©ment dans les deux cas. En fait, la programmation asynchrone peut ĂȘtre utilisĂ©e en conjonction avec des applications Ă thread unique et multi-thread. Cela signifie que vous pouvez avoir un programme asynchrone Ă un seul thread dans lequel un thread peut exĂ©cuter des tĂąches parallĂšles. Inversement, vous pouvez Ă©galement avoir une application asynchrone multi-thread oĂč plusieurs threads peuvent exĂ©cuter plusieurs tĂąches parallĂšles.
Pourquoi devrais-je utiliser du code asynchrone? Un exemple, s'il vous plaĂźt!
Pour avoir une analogie pour dĂ©montrer la programmation asynchrone, considĂ©rez le processus de prĂ©paration d'une tarte. Ce processus sera reprĂ©sentĂ© par un thread qui effectue plusieurs Ă©tapes (ou tĂąches), comme indiquĂ© dans le code ci-dessous. Ce code est correct et vous avez toujours un dĂ©licieux gĂąteau aprĂšs l'exĂ©cution de la mĂ©thode. Cependant, puisque tout le code est synchrone, chaque ligne sera exĂ©cutĂ©e sĂ©quentiellement. En d'autres termes, vous serez complĂštement immobile en attendant que le four termine le prĂ©chauffage. Mais en mĂȘme temps, vous pourriez faire de la pĂąte pour votre tarte!
MĂ©thode synchrone MakeCake ()
Programme de cuisson synchrone des gĂąteaux
Dans la vraie vie, vous avez tendance à diviser ce processus en tùches, à pétrir la pùte pendant que le four chauffe. Ou faites le glaçage pendant que le gùteau est cuit au four. Cela augmente votre productivité et vous permet de cuire le gùteau beaucoup plus rapidement. C'est là que le code asynchrone est utile! En rendant notre code actuel asynchrone, nous pouvons faire d'autres choses pour passer le temps pendant que nous attendons le résultat d'une tùche , comme la cuisson d'une tarte au four.
Pour ce faire, nous modifierons notre code et ajouterons la méthode PassTheTime . Maintenant, notre code enregistre l'état de la tùche, démarre une autre opération synchrone ou asynchrone et obtient le résultat de la tùche enregistrée si nécessaire.
Asynchronous MakeCake ()
Asynchronous Cake Baking Program
Comparé à la méthode synchrone MakeCake , qui ne dispose pas de la méthode PassTheTime , la méthode asynchrone MakeCakeAsync peut effectuer plus de tùches sans bloquer le thread, ce qui réduit le temps nécessaire pour terminer la méthode entiÚre.
Comparaison des programmes asynchrones et synchrones
Comment Ă©crire du code asynchrone dans .NET?
C # vous permet d'Ă©crire du code asynchrone Ă l' aide du Groupe de type et les Attendre les et async mots - clĂ©s . Le type de tĂąche informe l'appelant d'un Ă©ventuel type de retour. Cela indique Ă©galement que d'autres actions peuvent continuer Ă ĂȘtre effectuĂ©es dans la mĂ©thode appelante. Le mot - clĂ© async est associĂ© au mot - clĂ© await , qui notifie au compilateur que nous avons besoin d'une valeur de retour de mĂ©thode, mais pas immĂ©diatement. Par consĂ©quent, nous n'avons pas besoin de bloquer le thread appelant et nous pouvons continuer Ă effectuer d'autres tĂąches jusqu'Ă ce que la valeur attendue soit requise. Initialement, la mĂ©thode asynchrone s'exĂ©cutera de maniĂšre synchrone jusqu'Ă ce que le mot-clĂ© await soit trouvĂ©... C'est exactement le moment oĂč l'exĂ©cution de la mĂ©thode dĂ©marrera de maniĂšre asynchrone.
J'ai appris le code asynchrone! Maintenant quoi?
Bien qu'une application de cuisson de gùteaux asynchrone soit excellente, il existe de nombreuses autres applications du monde réel qui utilisent également du code asynchrone. Les deux exemples les plus courants sont les suivants:
Applications qui utilisent des requĂȘtes HTTP - Selon la requĂȘte, les appels HTTP peuvent prendre un certain temps Ă traiter. L'utilisation de code asynchrone nous permet d'effectuer d'autres opĂ©rations en attendant une rĂ©ponse du serveur.
Exemple de requĂȘte HTTP GET
Applications d'interface utilisateur - Les applications WPF ou toute autre qui utilise des boutons, des zones de texte et d'autres ressources UX sont Ă©galement idĂ©ales pour l'implĂ©mentation asynchrone. Par exemple, une application WPF qui analyse un fichier. Cette procĂ©dure peut prendre un certain temps. Cependant, en rendant cette action asynchrone, vous pouvez toujours interagir avec l'interface utilisateur sans arrĂȘter complĂštement l'application en attendant la fin de l'opĂ©ration.