Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menghentikan Goroutine dengan Anggun Selepas Masa yang Ditetapkan Menggunakan Konteks?

Bagaimana untuk Menghentikan Goroutine dengan Anggun Selepas Masa yang Ditetapkan Menggunakan Konteks?

Barbara Streisand
Barbara Streisandasal
2024-11-20 14:48:18771semak imbas

How to Gracefully Stop Goroutines After a Set Time Using Context?

Cara Menghentikan Goroutines selepas Tempoh Ditentukan Menggunakan Konteks

Latar Belakang Masalah

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.

Pendekatan Gagal

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.

Penyelesaian: Menggunakan Konteks

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:

  1. Di dalam fungsi ujian, konteks dengan tamat masa 50 milisaat dibuat.
  2. Pernyataan pilihan menyemak sama ada masa.Selepas saluran mempunyai acara (menunjukkan tidur selesai) atau jika konteks telah dibatalkan.
  3. Apabila masa konteks tamat , pernyataan pilih keluar, menunjukkan bahawa goroutine telah dibatalkan.

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!

Kenyataan:
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