go的异步调用

想请教一下,比如我有两个方法我都想调用,但是我不关心第二个方法调用的结果他只需要执行就行了,我想等watch方法直接执行完,就返回结果,然后eat方法自己去跑就可以了,该怎么做

func watch(){
    fmt.Println(1)
}

func eat(){
    fmt.Println(2)
}

func main(){
    watch()
    eat()
}
阅读 13.6k
5 个回答

eat前面➕一个go就可以了。

func watch() {
    for true {
        if (watchResult) { // 观察结果判断
        
        }
        
        time.Sleep(1 * time.Second)
    }
}

func eat() {
    // 执行eat
}

func main() {

    go eat()
    watch()
}



watch()
go eat()
time.sleep(1000)//防止main函数执行完成后程序结束,导致eat()方法来不及执行

你可以了解一下golang sync.WaitGroup 他的wait方法会阻塞代码的运行,等协程执行完了结束进程

package main

import (

    "fmt"
    "sync"
    "time"
)

var wg  sync.WaitGroup

func watch(){
    fmt.Println(1)
}

func eat(){
    time.Sleep(10*time.Second)
    fmt.Println(2)
    wg.Done()

}

func main(){
    wg = sync.WaitGroup{}
    watch()
    wg.Add(1)
    go eat()
    wg.Wait()

}

当然是采用信号进行并发的控制了

package main

import "fmt"

func watch() {
    fmt.Println(1)
}

func eat(done chan<- int) {
    fmt.Println(2)
    done <- 1
}

func main() {
    done := make(chan int)
    watch()
    go eat(done)
    <-done
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题