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:
CancellationToken
: Masukkan parameter CancellationToken
ke dalam setiap kaedah yang boleh dibatalkan.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>
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!