Gestion élégante de l'annulation des tâches de thread
Dans les applications multithread, il est crucial de gérer et de terminer efficacement les tâches dans les threads. Dans ce cas, vous rencontrez un problème où .Abort() sur un thread ne parvient pas à terminer la tâche associée. Pour résoudre ce problème, explorons une approche recommandée : utiliser des balises d'annulation.
Comprendre les pools de threads et le comportement des tâches
Lorsque System.Threading.Tasks sont créés, ces tâches s'appuient sur des threads d'arrière-plan gérés par le pool de threads. L'utilisation de .Abort() pour annuler ces threads n'est pas recommandée en raison du risque de fuite de ressources et d'instabilité des applications.
Utiliser la marque d'annulation pour l'annulation de la tâche
Au lieu de compter sur .Abort(), utilisez le marquage d'annulation comme méthode de terminaison de tâche plus efficace et contrôlable. Voici comment cela fonctionne :
Exemple de mise en œuvre
L'exemple de code suivant montre comment utiliser la balise d'annulation :
<code class="language-csharp">class Program { static void Main() { var cts = new CancellationTokenSource(); CancellationToken ct = cts.Token; Task.Factory.StartNew(() => { while (!ct.IsCancellationRequested) { // 执行工作 Thread.Sleep(100); } // 处理取消 Console.WriteLine("任务已取消"); }, ct); // 模拟等待任务完成 Thread.Sleep(3000); // 启动任务取消 cts.Cancel(); Console.ReadLine(); } }</code>
Dans cet exemple, la tâche s'exécutera indéfiniment jusqu'à ce que la méthode CancellationTokenSource.Cancel() soit appelée, déclenchant la logique d'annulation dans la tâche et mettant fin à son exécution. Le code amélioré évite l'imbrication inutile des instructions if
, rendant le code plus concis et plus lisible.
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!