.NET 4.5 présente des défis lors de la gestion de tâches simultanées et de longue durée. Bien que Task.Run()
propose une approche de base, il lui manque l'efficacité et l'élégance nécessaires pour exploiter pleinement les fonctionnalités asynchrones.
Une solution supérieure utilise async
/await
pour créer des méthodes Sleep
véritablement asynchrones, permettant des interruptions et une reprise efficace. Task.WhenAll()
attend simultanément l'achèvement de plusieurs tâches.
Exemple de code amélioré :
<code class="language-csharp">public static async Task Go() { Console.WriteLine("Initiating tasks"); Task<int> task1 = SleepAsync(5000); Task<int> task2 = SleepAsync(3000); await Task.WhenAll(task1, task2); int totalSleepTime = task1.Result + task2.Result; Console.WriteLine($"Total sleep time: {totalSleepTime} ms"); } private static async Task<int> SleepAsync(int ms) { Console.WriteLine($"Sleeping for {ms} ms"); await Task.Delay(ms); Console.WriteLine($"Sleep of {ms} ms COMPLETE"); return ms; }</code>
Ce code amélioré utilise async
et Task.Delay()
pour les délais non bloquants dans SleepAsync
. Go
lance les deux tâches simultanément via Task.WhenAll()
, permettant une exécution parallèle. Les résultats sont accessibles à l'aide de la propriété Result
une fois terminé.
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!