Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann verhindert werden, dass HTTP-Anfragen nach einer Zeitüberschreitung in einer Goroutine fortgesetzt werden?

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

DDD
DDDOriginal
2024-11-01 05:43:02558Durchsuche

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>

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!

Stellungnahme:
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