Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya boleh membatalkan tugas yang boleh dibatalkan di Winrt?

Bagaimanakah saya boleh membatalkan tugas yang boleh dibatalkan di Winrt?

Linda Hamilton
Lepaskan: 2025-01-26 12:51:09
asal
763 orang telah melayarinya

How Can I Reliably Cancel an Awaitable Task in WinRT?

Menangani pembatalan tugas yang tidak boleh dipercayai di Winrt

menggunakan

untuk menghentikan tugas WinRT boleh tidak boleh dipercayai; Kaedah ini mungkin kelihatan berjaya, namun tugas terus berjalan. Ini sering membawa kepada status tugas yang lengkap walaupun percubaan pembatalan. CancelNotification

Pendekatan pembatalan yang mantap

Penyelesaiannya terletak pada pemahaman. Pembatalan NET dan corak tak segerak berasaskan tugas (TAP). Ketik Mengesyorkan menggunakan

dalam kaedah asynchronous. Langkah penting adalah lulus CancellationToken ke setiap kaedah yang boleh dibatalkan dan memasukkan pemeriksaan biasa dalam kaedah tersebut. CancellationToken

Contoh kod yang lebih baik:

Kod yang disemak ini menunjukkan pembatalan tugas yang boleh dipercayai menggunakan

: await

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

  try
  {
    // Await the task; an exception is thrown if cancelled.
    await task;
  }
  catch (OperationCanceledException)
  {
    // Handle cancellation gracefully.
    Console.WriteLine("Task cancelled successfully.");
  }
}

private int slowFunc(int a, int b, CancellationToken cancellationToken)
{
  string someString = string.Empty;
  for (int i = 0; i < 1000000; i++)
  {
    someString += i.ToString(); // Simulate long-running operation
    cancellationToken.ThrowIfCancellationRequested();
  }
  return a + b;
}</code>
Salin selepas log masuk
Kod ini menggunakan

seperti berikut: CancellationToken

  • Pengendalian Pengecualian: Melemparkan await task jika tugas dibatalkan. Pengecualian ini ditangkap dan dikendalikan. OperationCanceledException
  • Pemeriksaan pembatalan biasa: di dalam cancellationToken.ThrowIfCancellationRequested() kerap memeriksa permintaan pembatalan. slowFunc
  • Pembatalan anggun: Jika pembatalan dikesan, membuang pengecualian, menyebarkan isyarat pembatalan sehingga timbunan panggilan. ThrowIfCancellationRequested
Pendekatan ini memastikan pembatalan yang boleh dipercayai

tugas -tugas di WinRT, menghalang proses latar belakang dan menyediakan penyelesaian yang lebih mantap. await

Atas ialah kandungan terperinci Bagaimanakah saya boleh membatalkan tugas yang boleh dibatalkan di Winrt?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan