Maison >développement back-end >C++ >Comment annuler correctement une tâche WinRT en attente ?

Comment annuler correctement une tâche WinRT en attente ?

DDD
DDDoriginal
2025-01-26 12:56:10388parcourir

How to Properly Cancel an `await`-ing WinRT Task?

Annuler efficacement la tâche

await Lorsque vous traitez avec la tâche WinRT, vous pouvez essayer d'utiliser la méthode pour mettre fin à la tâche. Cependant, ce code peut conduire à des résultats accidentels, car même si vous essayez d'annuler, la tâche continuera d'être terminée. Afin de surmonter cette limite et d'arrêter vraiment la tâche lors de l'annulation, veuillez suivre les étapes ci-dessous:

La fonction de l'annulation de la fonction en passant l'objet est transmise à votre méthode. Assurez-vous que ces jetons peuvent être vérifiés régulièrement. CancelNotification

Le fragment de code modifié annule efficacement la tâche comme prévu:

CancellationToken

En utilisant des blocs

dans l'opération , vous pouvez gérer

et prendre des mesures appropriées pour réduire l'impact de l'annulation des tâches.
<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
  {
    await task;
  }
  catch (OperationCanceledException)
  {
    // 处理取消
  }
}

private int slowFunc(int a, int b, CancellationToken cancellationToken)
{
  string someString = string.Empty;
  for (int i = 0; i < 1000000; i++)
  {
    someString += i.ToString();
    cancellationToken.ThrowIfCancellationRequested(); // 定期检查取消请求
  }
  return a + b;
}</code>

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!

Déclaration:
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