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>
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!