Cara Menghentikan Masa Goroutine dalam Go to Control Execution Time
Goroutines, sebahagian penting daripada Go concurrency, membenarkan pelaksanaan tugasan tidak segerak. Walau bagaimanapun, kadangkala, adalah perlu untuk mengawal tempoh rutin ini dan menghalangnya daripada melaksanakan selama-lamanya.
Latar Belakang dan Masalah
Dalam alat ujian beban anda, anda ingin menamatkan goroutine selepas masa tertentu untuk mengehadkan tempoh proses panggilan HTTP. Pendekatan semasa menggunakan masa.Sleep() dalam goroutine mencipta saluran untuk komunikasi, tetapi ia mengakibatkan penamatan pramatang goroutine.
Penyelesaian menggunakan Konteks
Lagi pendekatan yang disyorkan melibatkan penggunaan pakej golang.org/x/net/context (tersedia dalam perpustakaan standard dalam Go 1.7 ), khususnya konteks.Antara muka konteks. Konteks menyediakan mekanisme untuk membatalkan atau meluangkan masa goroutines.
Coretan kod berikut menunjukkan penyelesaian ini:
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) }
Dalam kod ini:
Atas ialah kandungan terperinci Bagaimana untuk Menamatkan Masa dengan Anggun Goroutine dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!