Mengutamakan Pemilihan Kes dalam Go
Dalam pernyataan pilih Go, susunan penilaian kes tidak bersifat deterministik, yang membawa kepada potensi ketidakkonsistenan semasa mengendalikan konteks acara pembatalan tepat pada masanya. Satu senario biasa melibatkan rutin latar belakang yang menghantar degupan jantung tetap, yang sepatutnya berhenti serta-merta apabila konteks dibatalkan. Walau bagaimanapun, ada kemungkinan untuk memerhatikan degupan jantung dihantar walaupun selepas pembatalan konteks disebabkan oleh susunan pemilihan yang tidak dapat diramalkan.
Untuk memastikan penamatan degupan jantung serta-merta selepas pembatalan konteks, pendekatan yang lebih mantap diperlukan. Daripada bergantung pada susunan penilaian kes, kaedah pilihan adalah dengan mengutamakan kes pembatalan konteks secara eksplisit. Ini boleh dicapai dengan menggunakan pernyataan pilihan bersarang dengan keutamaan yang diingini: kes pembatalan konteks harus diletakkan dalam pernyataan pilihan luar, diikuti dengan pernyataan pilihan kedua yang mengendalikan fungsi degupan jantung.
Pertimbangkan kod diubah suai berikut :
func sendRegularHeartbeats(ctx context.Context) { ticker := time.NewTicker(time.Second) defer ticker.Stop() for { //outer select, giving priority to context cancellation select { case <-ctx.Done(): return default: } //inner select for heartbeat functionality select { case <-ctx.Done(): return case <-ticker.C: sendHeartbeat() } } }
Dengan meletakkan kes pengendalian degupan jantung di dalam pernyataan pilihan luar, kami mengutamakan kes pembatalan konteks dengan berkesan, memastikan pelaksanaannya segera apabila konteksnya dibatalkan. Ini menghapuskan kemungkinan sebarang degupan jantung dihantar selepas pembatalan konteks, menjamin gelagat yang diingini.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjamin Pembatalan Konteks Tepat Masa dalam Penyata `pilih` Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!