Wie kann verhindert werden, dass HTTP-Anfragen nach einer Zeitüberschreitung in einer Goroutine fortgesetzt werden?

DDD
Freigeben: 2024-11-01 05:43:02
Original
573 Leute haben es durchsucht

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

Goroutine-Timeout

Die bereitgestellte Funktion Find() verwendet eine Goroutine, um eine Reihe von HTTP-Anfragen zu stellen und deren Antworten zu verarbeiten. Es besteht jedoch die Sorge, dass diese Anfragen im Hintergrund weiterlaufen, selbst wenn sie das angegebene Zeitlimit überschreiten.

Potenzielles Goroutine-Leck

Es ist unwahrscheinlich, dass ein Goroutine-Leck vorliegt der Code. Wenn die Find()-Funktion eine Zeitüberschreitung zurückgibt, wird die Haupt-Goroutine fortgesetzt und die Hintergrund-Goroutine im Wesentlichen aufgegeben.

Abbruch von HTTP-Anfragen

Um zu vermeiden, dass nach einer Zeitüberschreitung Anfragen gestellt werden , besteht die Lösung darin, für jede HTTP-Anfrage einen context.Context zu verwenden. Ein Kontext ermöglicht es Ihnen, die Anfrage abzubrechen, wenn eine Zeitüberschreitung auftritt.

<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>
Nach dem Login kopieren

Wenn die Zeitüberschreitung auftritt, bricht der Aufruf von cancel() alle im ctx erstellten HTTP-Anfragen ab. Dadurch wird verhindert, dass diese Anfragen weiter verarbeitet werden oder Ressourcen verbrauchen.

Das obige ist der detaillierte Inhalt vonWie kann verhindert werden, dass HTTP-Anfragen nach einer Zeitüberschreitung in einer Goroutine fortgesetzt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!