github.com/benoitkugler/goacve@v0.0.0-20201217100549-151ce6e55dc8/client/controllers/threads.go (about)

     1  package controllers
     2  
     3  // Background offre un thread d'éxécution en arrière plan.
     4  // `Run` doit afficher un message d'erreur si une tâche est déjà en cours.
     5  // `job` est effectué dans un thread séparé, `onSuccess` dans le thread principal.
     6  // Si `job` renvoie une erreur non nil, elle est affichée.
     7  // Sinon, la valeur de retour de `job` est passée en argument à `onSuccess`
     8  type Background interface {
     9  	Run(job func() (interface{}, error), onSuccess func(_out interface{}))
    10  }
    11  
    12  type SequentialBackground struct {
    13  	OnError func(err error)
    14  }
    15  
    16  func (s SequentialBackground) Run(job func() (interface{}, error), onSuccess func(_out interface{})) {
    17  	o, err := job()
    18  	if err != nil {
    19  		s.OnError(err)
    20  		return
    21  	}
    22  	onSuccess(o)
    23  }