Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menghentikan Tugas dengan Betul Selepas Pembatalan dalam C#?

Bagaimanakah Saya Boleh Menghentikan Tugas dengan Betul Selepas Pembatalan dalam C#?

DDD
Lepaskan: 2025-01-26 12:36:10
asal
675 orang telah melayarinya

How Can I Properly Stop a Task Upon Cancellation in C#?

Mengendalikan Pembatalan Tugasan dengan Berkesan dalam C#

Kaedah CancellationToken.CancelNotification sahaja tidak menghentikan tugas yang sedang berjalan; ia hanya menandakan pembatalan. Untuk memastikan tugasan ditamatkan dengan bersih apabila dibatalkan, anda mesti memasukkan pengendalian pembatalan secara aktif dalam logik tugasan itu.

Memanfaatkan Corak Asynchronous (TAP) Berdasarkan Tugasan

Pendekatan paling berkesan melibatkan penggunaan TAP dan CancellationToken secara konsisten:

  • Lulus CancellationToken: Masukkan parameter CancellationToken ke dalam setiap kaedah yang boleh dibatalkan.
  • Semakan Pembatalan Berkala: Dalam kaedah ini, semak status token secara berkala menggunakan cancellationToken.ThrowIfCancellationRequested(). Jika pembatalan dikesan, buang pengecualian untuk menghentikan pelaksanaan.

Contoh Kod yang disemak dengan TAP

Contoh yang dipertingkatkan ini menunjukkan pengendalian pembatalan yang betul:

<code class="language-csharp">private async Task TryTask()
{
    using (var source = new CancellationTokenSource())
    {
        source.CancelAfter(TimeSpan.FromSeconds(1));
        try
        {
            Task<int> task = Task.Run(() => slowFunc(1, 2, source.Token), source.Token);
            int result = await task; // Await will re-throw any exceptions.
            Console.WriteLine($"Task completed successfully: {result}");
        }
        catch (OperationCanceledException)
        {
            Console.WriteLine("Task cancelled successfully.");
        }
    }
}

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

Penjelasan:

  • using pernyataan: Memastikan CancellationTokenSource dilupuskan dengan betul, walaupun pengecualian berlaku.
  • try-catch blok: Mengendalikan OperationCanceledException yang dilemparkan oleh cancellationToken.ThrowIfCancellationRequested(), menyediakan pengendalian pembatalan yang bersih.
  • slowFunc: Panggilan cancellationToken.ThrowIfCancellationRequested() diletakkan secara strategik dalam gelung, membolehkan semakan pembatalan kerap. Ini menghalang kerja yang tidak perlu selepas pembatalan diminta.

Pendekatan yang disemak ini menjamin bahawa tugas akan dihentikan dengan segera apabila pembatalan diminta, menghalang kebocoran sumber dan meningkatkan responsif aplikasi keseluruhan.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghentikan Tugas dengan Betul Selepas Pembatalan dalam C#?. 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