当前位置: 首页 > 面试题库 >

等待执行例程的正确方法

宋子辰
2023-03-14
问题内容

我想知道退出程序之前等待go例程完成的正确方法是什么。阅读其他答案,看来bool
chan可以解决问题,就像在Playground链接中一样

func do_stuff(done chan bool) {
    fmt.Println("Doing stuff")
    done <- true
}

func main() {
    fmt.Println("Main")
    done := make(chan bool)
    go do_stuff(done)
    <-done
    //<-done
}

我在这里有两个问题:

  • 为什么<-完成的作品完全可以?

  • 如果我取消最后一行的注释会怎样?我有一个死锁错误。这是因为通道为空,并且没有其他函数向其发送值吗?


问题答案:

为何<- done一切正常?

  • 之所以有效,是因为运行时检测到您正在向其他地方的通道写入内容。

如果我取消最后一行的注释会怎样?

  • 运行时足够聪明,可以知道没有其他东西在写,而且会死锁。

值得一提的是,如果您的内存非常有限,则可以使用done := make(chan struct{})done <- struct{}{}struct{}以确保使用0个内存。



 类似资料:
  • 本文向大家介绍C#实现程序等待延迟执行的方法,包括了C#实现程序等待延迟执行的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现程序等待延迟执行的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 下面的函数在for循环中调用几个异步函数。它解析不同的CSV文件来构建单个JavaScript对象。我想在for循环完成后返回对象。它在执行异步任务时立即返回空对象。有道理,但是我尝试了各种Promise/异步 /await组合,希望在for循环完成后运行一些东西。我显然不明白发生了什么。对于这样的事情,有更好的模式吗?还是我想错了? 这是我用来调用函数的代码,希望用CSV数据填充我的“retCo

  • 本文向大家介绍PHP ajax 异步执行不等待执行结果的处理方法,包括了PHP ajax 异步执行不等待执行结果的处理方法的使用技巧和注意事项,需要的朋友参考一下 短地址生成应用中,要根据长地址生成网页快照,这个生成时间非瞬发,不可预估。 所以前台方面采用的方案一般为先展示生成的短地址,再定期AJAX轮查网页快照是否生成完毕。 So,PHP代码这里做了如下处理: 前台Js的ajax脚本: 回调函数

  • 但这一个也不起作用。正确的答案是加入线程并删除2个睡眠: 我的问题是:为什么我的答案都不能被接受?我的实验室领导问,但他不能给我一个答案。在家里编写了测试代码,它似乎工作得很好。提前感谢您的帮助!

  • 很抱歉,如果这是我忽略的非常简单的事情,但我正在尝试制作一个组件,它基本上只将某些react路由器路由限制为具有活动令牌的用户。 看起来(正如预期的那样)只有“console.log(result)”执行了挂起的promise,但在最终结果中,我试图将一些逻辑编码到从后端给出的响应中(true或false),然后这些逻辑应该发送到privaterout组件,以确定是否应该将用户发送回登录,等等。。

  • 目前我正在为学校做一个项目,下面是要求: 编写一个Temperature类,它将保持以华氏为单位的温度,并提供获取以华氏、摄氏度和开尔文为单位的温度的方法。该类应具有以下字段: :保持华氏温度的倍增器。 该类应具有以下方法: :构造函数接受华氏温度(双倍)并将其存储在ftemp字段中。 :set Fahrenheit方法接受一个华氏温度(作为双值),并将其存储在ftemp字段中。 :返回ftemp