Maison > développement back-end > C++ > Comment puis-je annuler correctement les tâches asynchrones dans Windows 8 Winrt?

Comment puis-je annuler correctement les tâches asynchrones dans Windows 8 Winrt?

DDD
Libérer: 2025-01-26 12:46:09
original
452 Les gens l'ont consulté

How Can I Properly Cancel Asynchronous Tasks in Windows 8 WinRT?

Gérer gracieusement l'annulation des tâches asynchrones dans winrt

La gestion des tâches asynchrones de Windows 8 WinRT, bien que puissante, présente des défis lors de l'annulation des tâches. Un problème courant est la méthode CancelNotification tirant, mais la tâche continue l'exécution, laissant l'état de tâche à tort marqué comme "terminé" au lieu de "annulé".

La solution: levier CancellationToken efficacement

La clé pour résoudre ce problème réside dans la mise en œuvre correcte de la CancellationToken et le respect des directives de modèle asynchrones basées sur les tâches (TAP). Cela implique de passer un CancellationToken à chaque méthode annulée et de vérifier régulièrement son statut dans ces méthodes.

Exemple de code révisé:

Cet extrait de code amélioré démontre l'utilisation appropriée de CancellationToken:

<code class="language-csharp">private async Task TryTask()
{
    CancellationTokenSource source = new CancellationTokenSource();
    source.CancelAfter(TimeSpan.FromSeconds(1));
    Task<int> task = Task.Run(() => slowFunc(1, 2, source.Token), source.Token);

    try
    {
        // A canceled task will throw an exception when awaited.
        await task;
    }
    catch (OperationCanceledException)
    {
        // Handle cancellation gracefully.
    }
}

private int slowFunc(int a, int b, CancellationToken cancellationToken)
{
    for (int i = 0; i < 1000000; i++)
    {
        cancellationToken.ThrowIfCancellationRequested(); // Check for cancellation
        // ... your long-running operation ...
    }
    return a + b;
}</code>
Copier après la connexion

Cette méthode révisée slowFunc intègre un cancellationToken.ThrowIfCancellationRequested() Vérifier dans sa boucle. Si l'annulation est demandée, un OperationCanceledException est lancé, arrêtant efficacement la tâche et définissant correctement son statut sur «annulé». La méthode TryTask comprend désormais un bloc try-catch pour gérer cette exception.

Résultat:

Cette approche garantit que les tâches sont complètement interrompues lors de l'annulation, fournissant des rapports de statut de tâche précis et empêchant l'exécution de l'arrière-plan involontaire. La gestion appropriée des exceptions améliore encore la robustesse.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal