Dalam ujian beban, di mana banyak panggilan HTTP diatur dalam goroutine, ia menjadi penting untuk mengawal tempoh pelaksanaan rutin ini. Ini membolehkan pengguna menamatkan ujian beban pada masa yang telah ditetapkan.
Satu percubaan biasa untuk mencapai ini ialah menggunakan goroutine untuk memantau masa. Tempoh Tidur() dan isyarat penamatan siaran melalui saluran. Walaupun kaedah ini mungkin mencukupi dalam kes tertentu, kaedah ini gagal apabila goroutine terus membuat panggilan HTTP di luar goroutine utama.
Go 1.7 memperkenalkan pakej konteks penting untuk menangani isu ini . Konteks menyediakan cara berstruktur untuk membatalkan dan memantau pelaksanaan goroutine, menawarkan penyelesaian yang boleh dipercayai untuk penamatan berdasarkan masa.
package main import ( "context" "fmt" "time" ) func test(ctx context.Context) { t := time.Now() select { case <-time.After(1 * time.Second): fmt.Println("overslept") case <-ctx.Done(): } fmt.Println("used:", time.Since(t)) } func main() { ctx, _ := context.WithTimeout(context.Background(), 50*time.Millisecond) test(ctx) }
Penjelasan:
Pendekatan ini memastikan bahawa goroutine dibatalkan apabila masa yang ditentukan telah berlalu, tanpa mengira lokasinya dalam kod.
Atas ialah kandungan terperinci Bagaimana untuk Menghentikan Goroutine dengan Anggun Selepas Masa yang Ditetapkan Menggunakan Konteks?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!