-2
votes

Détecter une interruption de routine

Y a-t-il un moyen de détecter si une routine Go a été interrompue alors qu'elle exécutait? Je voudrais quelque chose de similaire à interrompteException en java: https://docs.oracle.com/javase/8/docs/api/java/lang/interruptedexception.html


3 commentaires

Comment un goroutine serait-il interrompu?


Voir cette réponse pour une discussion sur la façon dont une goroutine pourrait être arrêtée Stackoverflow.com/Questtions/6807590/how-a-stop-a-goroutine (lien corrigé)


Cela dépend vraiment de ce que vous entendez par «interrompu». L'interruption comme que vous parlez de Java ne se produit pas.


3 Réponses :


1
votes

Y a-t-il un moyen de détecter si une routine Go a été interrompue alors qu'elle exécutait?

NO.


0 commentaires

3
votes

Il y a quelques façons de dire si une goroutine s'est arrêtée.

  1. passez une chaîne à la goroutine. À l'intérieur du goroutine, reporter la fermeture du canal. En dehors du goroutine, vous pouvez attendre que le canal soit fermé.
  2. Créer un sync.waitgroup et incrémentez-le par un. Passez le Getgroup sur le goroutine. À l'intérieur de la goroutine, appelle d'appoint fait () sur le Getgroup . En dehors du goroutine, vous pouvez appeler attendre () sur le bustgroup pour savoir quand il est fini.

0 commentaires

3
votes

interrompteException < / a> en Java est lancée si le fil est interrompue, par exemple avec le thread.Interrupt () (alors qu'il attend, dormir, ou autre occupation).

Allez, vous ne pouvez pas interrompre un goroutine de l'extérieur (voir Annuler une opération de blocage dans Go ), ce qui signifie qu'il n'y a aucun sens à parler de la détecter.

Un goroutine peut se terminer normalement si la fonction exécutée dans un rendement goroutine ou peut se terminer brusquement si elle panique. Mais même si elle panique, cela est dû à sa propre fonction, et non pas parce que un autre goroutine les oblige ou l'interrompt.

A goroutine ne peut être arrêté si elle-même prend en charge une sorte de cessation d'emploi, par exemple Il peut surveiller un canal qu'un autre goroutine peut fermer (ou envoyer une valeur à ce sujet), qui, lorsqu'il est détecté, le goroutine peut retourner volontairement - ce qui comptera comme une terminaison normale (et non interruption).


0 commentaires