Programmation asynchrone et multi-étanches: différences clés
La programmation asynchrone et les moustiquaires sont souvent confus, mais ce sont des concepts complètement différents.
Programmation asynchrone
Le noyau de la programmation asynchrone est Opération non bloquante
. Lors de la rencontre de l'expression "Await" dans la méthode asynchrone, elle ne bloquera pas l'exécution du thread pour attendre que la tâche se termine. Au lieu de cela, il enregistrera la partie restante de la méthode dans une continuation et paiera le contrôle du droit de contrôle à l'appelant de la méthode asynchrone.Il est important que la méthode asynchrone n'aie pas besoin de créer des threads supplémentaires
. Étant donné que la méthode asynchrone fonctionne dans le contexte actuel de synchronisation, seul le temps de thread est utilisé pendant l'activité. "Task.Run" peut désinstaller le travail dense du CPU sur le thread d'arrière-plan, mais cela n'est pas valide pour le processus d'attendre le résultat.multi-thread
Multi-threads impliquent l'allocation de tâches à plusieurs threads de travail. Chaque processeur gère la tâche d'affectation indépendamment. Coordonner ces fils de travail pour prévenir les conflits des ressources et garantir que la compensation appropriée augmente la complexité. Une métaphore simple
L'exemple du restaurant peut aider à comprendre la différence entre les deux:
Synchrones:
Frais d'abord les œufs, puis cuire le pain.Single-Threading:
Considérez l'exemple de Jon Skeet:
Lors de l'appel , il déclenchera un fonctionnement asynchrone sans bloquer le thread d'appel.
Enregistrez la méthode restante comme continuation et exécutez lorsque la durée du site Web est disponible. En fonctionnant ici, l'appelant peut continuer à effectuer d'autres tâches.
Une fois l'achèvement, l'exécution se poursuit et le texte de l'étiquette est défini avec la durée du site Web.
<code class="language-c#">async void DisplayWebsiteLength ( object sender, EventArgs e ) { label.Text = "Fetching ..."; using ( HttpClient client = new HttpClient() ) { Task<string> task = client.GetStringAsync("http://csharpindepth.com"); string text = await task; label.Text = text.Length.ToString(); } }</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!