Maison >développement back-end >C++ >Async/Await : dois-je envelopper ma méthode dans « Task.Run » pour le threading en arrière-plan ?
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 ?
"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
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.
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; }
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.
É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.
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!