Async et Await démystifiés : éviter l'énigme Task.Run
Comprendre async et wait peut être délicat au début, mais décomposer les concepts peut simplifier le processus.
Async vs. Background Thread Exécution
Async ne signifie pas en soi « thread d'arrière-plan » ; il fait référence à des méthodes qui permettent de « céder » le contrôle au thread appelant avant de continuer. Ces points de rendement sont marqués par des expressions d'attente.
Awaitable vs. Async
Les types attendus peuvent être attendus (comme dans les expressions d'attente), tandis que les méthodes asynchrones permettent des opérations asynchrones. exécution. Toutes les méthodes asynchrones ne renvoient pas des types attendus, et vice versa.
Task.Run for Background Execution
Si vous souhaitez exécuter une opération sur un thread en arrière-plan et la rendre waitable, utilisez Task.Run :
private Task<int> DoWorkAsync() { return Task.Run(() => 1 + 2); }
Méthodes asynchrones pour Yielding
Créez des méthodes asynchrones qui renvoient à l'appelant en utilisant wait et async dans la signature de la méthode :
private async Task<int> GetWebPageHtmlSizeAsync() { var client = new HttpClient(); var html = await client.GetAsync("http://www.example.com/"); return html.Length; }
Évitez Task.Run in Synchronous Methods
Il n'est pas recommandé d'encapsuler les méthodes synchrones dans Task.Run. Si vous devez exécuter sur un thread en arrière-plan, créez une tâche distincte.
Ressources pour une exploration plus approfondie
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!