Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Saya Boleh Menjamin Pembatalan Konteks Tepat Masa dalam Penyata `pilih` Go?

Bagaimanakah Saya Boleh Menjamin Pembatalan Konteks Tepat Masa dalam Penyata `pilih` Go?

DDD
Lepaskan: 2024-12-21 21:21:54
asal
178 orang telah melayarinya

How Can I Guarantee Timely Context Cancellation in Go's `select` Statement?

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()
        }
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan