Elakkan menggunakan thread.abort () untuk membatalkan tugas tpl
Apabila menggunakan tugas pelaksanaan thread, jika anda cuba menggunakan kaedah
untuk menamatkan thread, tugas akan terus dilaksanakan tanpa gangguan. Ini kerana tugas menggunakan benang latar belakang di kolam benang, dan benang ini tidak terjejas oleh penamatan benang.
Abort()
Skim Alternatif: Token Pembatalan
Untuk menyebarkan permintaan pembatalan ke tugas, tag pembatalan harus digunakan. Tag ini menyediakan mekanisme pembatalan benang kolaboratif yang akan membatalkan permintaan untuk menunjukkan isyarat yang boleh memantau dan bertindak balas sebagai tindak balas.
pelaksanaan label pembatalan
Serpihan kod berikut menunjukkan cara menggunakan tanda pembatalan untuk mencapai pembatalan tugas:
<.> Mengenai .abort () langkah berjaga -jaga
<code class="language-csharp">// 创建一个取消标记源 var ts = new CancellationTokenSource(); // 从源获取取消标记 CancellationToken ct = ts.Token; // 创建一个新任务 Task.Factory.StartNew(() => { while (true) { // 执行繁重的计算 Thread.Sleep(100); // 检查取消请求 if (ct.IsCancellationRequested) { Console.WriteLine("任务已取消"); break; } } }, ct); // 模拟等待任务完成3秒 Thread.Sleep(3000); // 决定取消任务 ts.Cancel();</code>
biasanya tidak disyorkan untuk membatalkan benang. Kaedah ini boleh menyebabkan tingkah laku yang tidak boleh dipercayai dan aplikasi yang berpotensi untuk runtuh. Pembatalan adalah kaedah yang lebih struktur dan boleh dipercayai untuk pembatalan misi untuk membatalkan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membatalkan Tugas TPL Dengan Berkesan Tanpa Menggunakan Thread.Abort()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!