J'ai un problème étrange avec le programme aRuby que j'écris.Comment puis-je savoir si une méthode ou une boucle est terminée?
Fondamentalement, l'idée est que le programme fonctionne constamment en arrière-plan. Le programme vérifie l'historique de mon navigateur toutes les 30 secondes et télécharge tous les nouveaux éléments d'historique sur un serveur.
# client.rb
history = HistoryUploader.new(Chrome)
# Run everything
loop do
history.run
sleep 30
end
La partie importante de la classe HistoryUploader
ressemble à ceci
class HistoryUploader
def run
upload_history until local.last_seen_history_item == server.last_seen_history_item
end
def upload_history
# POST batches of history items to the server
end
end
Le principal problème que je vois avec ce code est que si HistoryUploader.run
prend plus de 30 secondes pour terminer (ce qui peut très bien depuis il envoie plusieurs requêtes http), la boucle extérieure dans client.rb
va tenter d'appeler à nouveau run
et je pourrais obtenir des requêtes parallèles allant au serveur ce qui désorganiserait vraiment les choses.
Est-il possible de bloquer la méthode run
à deux reprises jusqu'à ce qu'elle soit terminée?