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 code> en java: https://docs.oracle.com/javase/8/docs/api/java/lang/interruptedexception.html P>
3 Réponses :
Y a-t-il un moyen de détecter si une routine Go a été interrompue alors qu'elle exécutait? P> blockQuote>
NO. P>
Il y a quelques façons de dire si une goroutine s'est arrêtée. P>
sync.waitgroup code> et incrémentez-le par un. Passez le Getgroup code> sur le goroutine. À l'intérieur de la goroutine, appelle d'appoint fait () code> sur le Getgroup code>. En dehors du goroutine, vous pouvez appeler attendre () code> sur le bustgroup code> pour savoir quand il est fini. LI>
ol>
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. P>
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. P>
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). p> interrompteException code> < / a> en Java est lancée si le fil est interrompue, par exemple avec le
thread.Interrupt () code>
(alors qu'il attend, dormir, ou autre occupation). p>
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.