Bagaimana untuk Mencegah Permintaan HTTP daripada Berterusan Selepas Tamat Masa dalam Goroutine?

DDD
Lepaskan: 2024-11-01 05:43:02
asal
573 orang telah melayarinya

How to Prevent HTTP Requests from Continuing After Timeout in a Goroutine?

Goroutine Timeout

Fungsi yang disediakan, Find(), menggunakan goroutine untuk membuat satu siri permintaan HTTP dan mengendalikan responsnya. Walau bagaimanapun, kebimbangan adalah bahawa permintaan ini berterusan di latar belakang walaupun ia melebihi tamat masa yang ditentukan.

Potensi Kebocoran Goroutine

Tidak mungkin terdapat kebocoran goroutine dalam kod tersebut. Apabila fungsi Find() mengembalikan tamat masa, goroutine utama diteruskan dan goroutine latar belakang pada dasarnya ditinggalkan.

Pembatalan Permintaan HTTP

Untuk mengelakkan membuat permintaan selepas tamat masa , penyelesaiannya ialah menggunakan konteks.Konteks untuk setiap permintaan HTTP. Konteks membenarkan anda membatalkan permintaan jika tamat masa berlaku.

<code class="go">func Find() (interface{}, bool) {
  ctx, cancel := context.WithTimeout(context.Background(), 50*time.Millisecond)
  defer cancel()

  ch := make(chan Response, 1)

  go func() {
    data, status := findCicCode()
    ch <- Response{data: data, status: status}
  }()

  select {
  case response := <-ch:
    return response.data, response.status
  case <-ctx.Done():
    return "Request timed out", false
  }
}</code>
Salin selepas log masuk

Apabila tamat masa berlaku, panggilan cancel() akan membatalkan semua permintaan HTTP yang dibuat dalam ctx. Ini menghalang sebarang pemprosesan lanjut atau sumber digunakan oleh permintaan tersebut.

Atas ialah kandungan terperinci Bagaimana untuk Mencegah Permintaan HTTP daripada Berterusan Selepas Tamat Masa dalam 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!