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 }