Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya dapat membatalkan tugas -tugas asynchronous dengan betul di Windows 8 Winrt?

Bagaimanakah saya dapat membatalkan tugas -tugas asynchronous dengan betul di Windows 8 Winrt?

DDD
DDDasal
2025-01-26 12:46:09455semak imbas

How Can I Properly Cancel Asynchronous Tasks in 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

Penyelesaian: memanfaatkan

dengan berkesan CancellationToken Kunci untuk menyelesaikan ini terletak dengan betul melaksanakan

dan mematuhi garis panduan corak tak segerak berasaskan tugas (TAP). Ini melibatkan lulus

ke setiap kaedah yang boleh dibatalkan dan sentiasa memeriksa statusnya dalam kaedah tersebut. CancellationToken CancellationToken

Contoh kod yang disemak semula:

Coretan kod yang lebih baik ini menunjukkan penggunaan yang betul

:

CancellationToken

Kaedah yang disemak semula ini menggabungkan
<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!

Kenyataan:
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