Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mencegah Permintaan HTTP daripada Berterusan Selepas Tamat Masa dalam Goroutine?

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

DDD
DDDasal
2024-11-01 05:43:02644semak imbas

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>

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!

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