完成wg.wait()后停止询问输入的选项

时间:2017-04-19 19:08:23

标签: go

1 即可。我触发了一个goroutine(运行第三方程序),我正在使用wg.Wait()等待它完成

2 即可。在wg.Wait()之前,我想为用户提供取消正在运行的第三方程序的选项(如果他愿意)

第3 即可。第三方程序执行完成后,此用户输入选项应该消失(没有理由他应该停止已经完成的过程)。目前,必须在触发wg.Wait()之前提供此输入

我该怎么办?我考虑将optiontoStop()函数保留在goroutine中,然后在wg.Wait()完成后将其删除但是我无法完成它或者是否有办法将随机值发送到阻塞调用从XYZ返回之前的scanf?或任何其他解决方法?

更多详情:

1

func XYZ() {
   wg.Add(1)
   go doSomething(&wg) // this runs a third party program
}

2 即可。

func ABC() {
   XYZ()
   optiontoStop() // I want this input wait request to vanish off after 
                  // the third party program execution                    
                  // (doSomething()) is completed
   wg.Wait() 
   //some other stuff 
}

第3 即可。

func optiontoStop() {
   var option string
   fmt.Println("Type 'quit'  if you want to quit the program")
   fmt.Scanf("%s",&string)
   //kill the process etc.
 }

1 个答案:

答案 0 :(得分:3)

你必须在另一个Go例程中处理你的用户输入,然后代替wg.Wait(),可能只使用一个选择:

func ABC() {
    done := make(chan struct{})
    go func() {
        defer close(done)
        doSomething()
    }()
    stop := make(chan struct{})
    go func() {
        defer close(stop)
        stop <- optionToStop()
    }
    select {
    case done:
        // Finished, close optionToStop dialog, and move on
    case stop:
        // User requested stop, terminate the 3rd party thing and move on
    }
}