Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh membatalkan tugas dengan anggun di kolam benang dan bukannya menggunakan thread.abort ()?
Pengendalian elegan pembatalan tugas urutan
Dalam aplikasi berbilang benang, adalah penting untuk mengurus dan menamatkan tugasan dalam rangkaian dengan berkesan. Dalam kes ini, anda menghadapi masalah di mana .Abort() pada thread gagal menamatkan tugasan yang berkaitan. Untuk menyelesaikan masalah ini, mari teroka pendekatan yang disyorkan: menggunakan teg batal.
Memahami kumpulan benang dan gelagat tugas
Apabila System.Threading.Tasks dibuat, tugasan ini bergantung pada urutan latar belakang yang diuruskan oleh kumpulan benang. Menggunakan .Abort() untuk membatalkan urutan ini tidak disyorkan kerana potensi kebocoran sumber dan ketidakstabilan aplikasi.
Gunakan tanda pembatalan untuk pembatalan tugas
Daripada bergantung pada .Abort(), gunakan penandaan pembatalan sebagai kaedah penamatan tugas yang lebih cekap dan terkawal. Begini cara ia berfungsi:
Contoh pelaksanaan
Contoh kod berikut menunjukkan cara menggunakan teg batal:
<code class="language-csharp">class Program { static void Main() { var cts = new CancellationTokenSource(); CancellationToken ct = cts.Token; Task.Factory.StartNew(() => { while (!ct.IsCancellationRequested) { // 执行工作 Thread.Sleep(100); } // 处理取消 Console.WriteLine("任务已取消"); }, ct); // 模拟等待任务完成 Thread.Sleep(3000); // 启动任务取消 cts.Cancel(); Console.ReadLine(); } }</code>
Dalam contoh ini, tugasan akan berjalan selama-lamanya sehingga kaedah CancellationTokenSource.Cancel() dipanggil, mencetuskan logik pembatalan dalam tugasan dan menamatkan pelaksanaannya. Kod yang dipertingkatkan mengelakkan sarang if
pernyataan yang tidak perlu, menjadikan kod lebih ringkas dan boleh dibaca.
Atas ialah kandungan terperinci Bagaimanakah saya boleh membatalkan tugas dengan anggun di kolam benang dan bukannya menggunakan thread.abort ()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!