Rumah > pembangunan bahagian belakang > C++ > Bagaimana cara membatalkan tugas `menunggu ing ing?

Bagaimana cara membatalkan tugas `menunggu ing ing?

DDD
Lepaskan: 2025-01-26 12:56:10
asal
383 orang telah melayarinya

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

Membatalkan tugas dengan berkesan jika await digunakan

Apabila bekerja dengan tugasan WinRT, anda boleh cuba menamatkan tugasan menggunakan kaedah CancelNotification. Walau bagaimanapun, kod ini mungkin menyebabkan hasil yang tidak dijangka kerana tugasan itu sebenarnya akan terus diselesaikan walaupun anda cuba membatalkannya. Untuk mengatasi had ini dan benar-benar menghentikan tugas apabila dibatalkan, ikut langkah berikut:

Sepadukan fungsi pembatalan ke dalam kaedah anda dengan menghantar objek CancellationToken. Pastikan setiap kaedah yang boleh ditamatkan secara berkala mengesahkan token ini.

Coretan kod yang diubah suai dengan berkesan membatalkan tugas seperti yang dijangkakan:

<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>
Salin selepas log masuk

Dengan menggunakan blok await dalam tindakan try/catch, anda boleh mengendalikan OperationCanceledException dan mengambil tindakan yang sesuai untuk mengurangkan kesan pembatalan tugas.

Atas ialah kandungan terperinci Bagaimana cara membatalkan tugas `menunggu ing ing?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan