Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya dapat membatalkan tugas -tugas asynchronous dengan betul di Windows 8 Winrt?
dengan anggun mengendalikan pembatalan tugas asynchronous di Winrt
Pengurusan Tugas Asynchronous Windows 8 Winrt, sementara yang berkuasa, memberikan cabaran ketika membatalkan tugas. Masalah biasa ialah penembakan kaedah, namun tugas itu terus melaksanakan, meninggalkan status tugas yang salah ditandakan sebagai "selesai" dan bukannya "dibatalkan." CancelNotification
dengan berkesan CancellationToken
Kunci untuk menyelesaikan ini terletak dengan betul melaksanakan
ke setiap kaedah yang boleh dibatalkan dan sentiasa memeriksa statusnya dalam kaedah tersebut. CancellationToken
CancellationToken
Coretan kod yang lebih baik ini menunjukkan penggunaan yang betul
:
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>semak dalam gelungnya. Jika pembatalan diminta,
dibuang, berkesan menghentikan tugas dan menetapkan statusnya dengan betul untuk "dibatalkan." Kaedah slowFunc
sekarang termasuk blok cancellationToken.ThrowIfCancellationRequested()
untuk mengendalikan pengecualian ini. OperationCanceledException
TryTask
try-catch
hasil:
Pendekatan ini memastikan bahawa tugas -tugas dihentikan sepenuhnya apabila pembatalan, menyediakan pelaporan status tugas yang tepat dan menghalang pelaksanaan latar belakang yang tidak diingini. Pengendalian pengecualian yang betul terus meningkatkan keteguhan.
Atas ialah kandungan terperinci Bagaimanakah saya dapat membatalkan tugas -tugas asynchronous dengan betul di Windows 8 Winrt?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!