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!