Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Pakej `konteks` Go Boleh Digunakan untuk Tamat Masa Goroutine?

Bagaimanakah Pakej `konteks` Go Boleh Digunakan untuk Tamat Masa Goroutine?

Susan Sarandon
Lepaskan: 2024-11-20 04:36:02
asal
822 orang telah melayarinya

How Can Go's `context` Package Be Used to Timeout Goroutines?

Bagaimanakah Cara Menguruskan Goroutine Masa Habis?

Soalan:

Anda sedang membina alat yang mengendalikan berbilang panggilan HTTP dalam goroutine serentak. Untuk mengelakkan senario pelaksanaan yang tidak ditentukan, anda mencari cara untuk membatalkan goroutine selepas luput masa tertentu.

Penyelesaian:

Sementara pendekatan mencipta goroutine untuk tidur untuk tempoh tertentu dan menghantar mesej siaran untuk membatalkan goroutine lain nampaknya logik, nampaknya ada masalah dengan pelaksanaan goroutine dalam senario ini.

Untuk menangani cabaran ini, pertimbangkan untuk memanfaatkan pakej konteks dalam Go. Ia menawarkan cara yang berkesan untuk mengendalikan tamat masa dan pembatalan konteks untuk gorouti.

Coretan Kod:

Berikut ialah contoh menggunakan pakej konteks untuk pengurusan tamat masa bagi gorouti:

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("cancelled")
    }
    fmt.Println("used:", time.Since(t))
}

func main() {
    ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)

    go test(ctx)

    // cancel context after 30 milliseconds
    time.Sleep(30 * time.Millisecond)
    cancel()
}
Salin selepas log masuk

Kod ini mencipta konteks dengan tamat masa 50 milisaat. Satu goroutine kemudiannya dilancarkan untuk melaksanakan fungsi ujian, melepasi konteks. Dalam fungsi ujian, pernyataan pilih menunggu sama ada tamat masa berlaku atau konteks dibatalkan. Selepas 30 milisaat, konteks dibatalkan, menyebabkan goroutine selesai dan mencetak "dibatalkan."

Atas ialah kandungan terperinci Bagaimanakah Pakej `konteks` Go Boleh Digunakan untuk Tamat Masa Goroutine?. 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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan