Maison > développement back-end > C++ > Comment puis-je annuler efficacement les tâches TPL sans utiliser Thread.Abort() ?

Comment puis-je annuler efficacement les tâches TPL sans utiliser Thread.Abort() ?

Linda Hamilton
Libérer: 2025-01-25 02:30:10
original
511 Les gens l'ont consulté

How Can I Effectively Cancel TPL Tasks Without Using Thread.Abort()?

Évitez d'utiliser Thread.Abort() pour annuler les tâches TPL

Lorsque vous utilisez des threads pour exécuter des tâches, si vous essayez de terminer le thread à l'aide de la méthode Abort(), la tâche continuera à s'exécuter sans interruption. En effet, les tâches utilisent des threads d'arrière-plan du pool de threads et ces threads ne sont pas affectés par la terminaison des threads.

Alternative : jetons d'annulation

Afin de propager les demandes d'annulation aux tâches, un jeton d'annulation doit être utilisé. Ces marqueurs fournissent un mécanisme coopératif d'annulation de thread qui représente les demandes d'annulation comme des signaux que les tâches peuvent surveiller et auxquels ils peuvent répondre.

Implémentation à l'aide de balises d'annulation

L'extrait de code suivant montre comment utiliser une balise d'annulation pour implémenter l'annulation de tâches :

<code class="language-csharp">// 创建一个取消标记源
var ts = new CancellationTokenSource();

// 从源获取取消标记
CancellationToken ct = ts.Token;

// 创建一个新任务
Task.Factory.StartNew(() => {
    while (true) {
        // 执行繁重的计算
        Thread.Sleep(100);

        // 检查取消请求
        if (ct.IsCancellationRequested) {
            Console.WriteLine("任务已取消");
            break;
        }
    }
}, ct);

// 模拟等待任务完成3秒
Thread.Sleep(3000);

// 决定取消任务
ts.Cancel();</code>
Copier après la connexion

Remarques sur .Abort()

Il convient de noter qu'il n'est généralement pas recommandé d'utiliser la méthode Abort() pour l'annulation de thread. Cette approche peut conduire à un comportement peu fiable et à des pannes potentielles d'applications. Les marqueurs d'annulation fournissent une méthode plus structurée et plus fiable pour l'annulation de tâches.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal