Maison >développement back-end >C++ >Task.Run vs Async Keyword : quand utiliser chacun pour les opérations asynchrones ?

Task.Run vs Async Keyword : quand utiliser chacun pour les opérations asynchrones ?

DDD
DDDoriginal
2025-01-05 11:48:39138parcourir

Task.Run vs. Async Keyword: When to Use Each for Asynchronous Operations?

Asynchronicité dans les méthodes Do Work : Task.Run vs. Mot-clé asynchrone

Dans le domaine de la programmation asynchrone, la distinction entre l'exécution asynchrone et l’attente peut être nuancée. Examinons les spécificités de Task.Run et du mot-clé async et comprenons leurs rôles dans la création de méthodes qui s'exécutent de manière synchrone ou asynchrone.

Exécution asynchrone : Task.Run

La méthode Task.Run permet de déléguer l'exécution du code à un thread en arrière-plan. En créant un objet Task qui encapsule le code, Task.Run vous permet d'exécuter le code de manière asynchrone sans bloquer le chemin d'exécution actuel. Cependant, l'utilisation de Task.Run ne rend pas nécessairement une méthode attendue.

Attention : le mot clé asynchrone

Une méthode asynchrone est une méthode qui peut être suspendue et reprise en attente. expressions. Cela permet aux méthodes de renvoyer des points d'exécution au thread appelant sans blocage. Une méthode déclarée asynchrone peut renvoyer une tâche ou une tâche (pour une valeur de retour paramétrée).

Exemple : Exécution sans Async/Await

// Not async because it does not use await
private Task<int> DoWorkAsync()
{
  return Task.Run(() =>
  {
    return 1 + 2;
  });
}

Dans cet exemple, nous renvoyons une tâche du délégué Task.Run. Cependant, la méthode elle-même n'est pas déclarée asynchrone, car elle n'utilise pas wait.

Exemple : Exécution asynchrone avec Await

private async Task<int> GetWebPageHtmlSizeAsync()
{
  var client = new HttpClient();
  var html = await client.GetAsync("http://www.example.com/");
  return html.Length;
}

Dans cet exemple, la méthode est déclaré asynchrone et utilise wait pour suspendre l'exécution lors de l'opération HttpClient.GetAsync. La méthode reviendra à l'appelant pendant le téléchargement de la page Web, puis reprendra lorsque le résultat sera disponible.

Bonnes pratiques :

  1. Considérez en utilisant le mot-clé async pour créer des méthodes capables de suspendre et de reprendre l'exécution.
  2. Utilisez Task.Run pour exécuter du code de manière asynchrone sur un thread d'arrière-plan, mais seulement si vous devez éviter de bloquer le chemin d'exécution actuel.
  3. Évitez d'encapsuler entièrement les méthodes synchrones dans Task.Run. Les méthodes synchrones doivent avoir des signatures synchrones.

Conclusion :

Task.Run facilite l'exécution asynchrone en déléguant le code à un thread d'arrière-plan. Le mot-clé async active l'attente et permet aux méthodes de suspendre et de reprendre l'exécution, offrant ainsi la flexibilité nécessaire pour créer un code réactif et efficace.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn