Maison >développement back-end >C++ >Async/Await : dois-je envelopper ma méthode dans « Task.Run » pour le threading en arrière-plan ?

Async/Await : dois-je envelopper ma méthode dans « Task.Run » pour le threading en arrière-plan ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-05 12:31:40170parcourir

Async/Await: Should I Wrap My Method in `Task.Run` for Background Threading?

Démêler Async/Await : Method Wrapper ou Background Thread ?

Dans la quête de la compréhension de async/await, le dilemme se pose : est-il nécessaire d'encapsuler une méthode dans Task.Run pour obtenir à la fois un comportement asynchrone et une exécution de thread en arrière-plan ?

Méthodes asynchrones et attendues Tasks

"Async" désigne une méthode qui peut céder le contrôle au thread appelant avant de commencer l'exécution. Cette cession se produit via des expressions d'attente. En revanche, « asynchrone » tel que défini par MSDN (un terme souvent trompeur) fait référence à du code qui s'exécute sur un thread distinct.

Séparément, « waitable » décrit un type qui peut être utilisé avec l'opérateur wait. Les attendus courants incluent Task et Task.

Adaptation du code pour l'exécution de threads en arrière-plan

Pour exécuter une méthode sur un thread en arrière-plan tout en conservant l'attente, utilisez Task.Run :

private Task<int> DoWorkAsync()
{
  return Task.Run(() => 1 + 2);
}

Cependant, cette approche est généralement déconseillée.

Activation de l'asynchrone Rendement

Pour créer une méthode asynchrone capable de mettre en pause et de céder le contrôle, déclarez la méthode comme asynchrone et utilisez wait aux points de rendement désignés :

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

Lier le code asynchrone et les attentes

Le code asynchrone s'appuie sur les attendus dans ses expressions d'attente. Les attendus peuvent être soit d'autres méthodes asynchrones, soit des méthodes synchrones qui renvoient des attendus.

Encapsuler les méthodes dans Task.Run : une pratique déconseillée

Évitez d'encapsuler sans discernement les méthodes synchrones dans Task.Run. Au lieu de cela, conservez des signatures synchrones, en laissant la possibilité d'encapsuler au consommateur.

Ressources supplémentaires pour Async/Await

  • [Async/Await Fondamentaux](https://blog.stephencleary.com/2012/02/async-await-fundamentals.html)
  • [Documentation MSDN Async](https://docs.microsoft.com/en-us /dotnet/csharp/programming-guide/concepts/async/)

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