Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengisyaratkan Rutin Pergi untuk Berhenti tanpa Menyekat?
Dalam senario ini, rutin pergi perlu diarahkan untuk menghentikan operasi. Cabaran utama terletak pada mencapai isyarat ini tanpa memperkenalkan tingkah laku menyekat.
Penyelesaian yang dicadangkan melibatkan penggunaan saluran sekunder. Walau bagaimanapun, penggunaan saluran konvensional akan membawa kepada penyekatan jika rutin go cuba menerima isyarat daripada saluran ini semasa memproses data secara aktif.
Untuk mengelakkan sekatan, kod tersebut boleh memanfaatkan kes pilih dengan klausa lalai. Ini membolehkan rutin go meneruskan pemprosesan data sehingga isyarat diterima daripada saluran kedua:
<code class="go">go func() { for { fmt.Println("working") time.Sleep(1 * time.Second) select { case <-tooLate: fmt.Println("stopped") return case proCh <- "processed": //this why it won't block the goroutine if the timer expirerd. default: // adding default will make it not block } fmt.Println("done here") } }()</code>
Dengan menggunakan klausa lalai, rutin go boleh mengelak daripada menyekat walaupun pemasa tamat tempoh.
Pendekatan lain melibatkan penggunaan penyegerakan.Cond dan bukannya saluran. Pemboleh ubah keadaan menyediakan cara untuk menunggu dan memberi isyarat merentas gorouti.
Dengan sama ada saluran kedua dengan klausa lalai atau penyegerakan.Cond, anda boleh memberi isyarat kepada rutin pergi untuk berhenti dengan berkesan berlari tanpa perlu menyekat tingkah laku.
Atas ialah kandungan terperinci Bagaimana untuk Mengisyaratkan Rutin Pergi untuk Berhenti tanpa Menyekat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!