不清楚具体会有多少个 goroutines,但是想要等他们都结束,该怎么做

2019-10-12 10:09:49 +08:00
 hujianxin

有个需求如下:

  1. 随着用户的操作,服务器动态生成很多 goroutines
  2. 在用户调用某个接口时,结束整个操作,但是要等所有 goroutines 结束

之前用 WaitGroup,但是这个好像不太满足这种场景呢,这种场景开始时并不清楚有多少个 goroutines 会产生,也不清楚哪一个运行时间长。

哪位大佬帮忙指点迷津,多谢

1570 次点击
所在节点    程序员
10 条回复
mengzhuo
2019-10-12 10:16:13 +08:00
官方包的 context 就是你要的
SmiteChow
2019-10-12 10:19:52 +08:00
没写过 go,但通用的思路是 create coroutine 记录一下 instance 到 global
qieqie
2019-10-12 11:08:08 +08:00
WaitGroup 可以满足你的需求
hujianxin
2019-10-12 11:27:43 +08:00
@qieqie 应该是可以,waitgroup 可以动态的 add,我正在继续测试,多谢
YakuMioto
2019-10-12 11:32:19 +08:00
WaitGroup 我都是用来解决程序何时退出的, 我觉得这个是用来控制大局观的, 看你的描述, 我觉得 context 最合适. 同 1L.
Vegetable
2019-10-12 11:37:06 +08:00
这就是 waitgroup
lazyfighter
2019-10-12 11:37:07 +08:00
为什么我感觉应该用 channel 呢,用户操作发个信号然后 goroute 退出
abel1989
2019-10-12 11:40:00 +08:00
context 你值得拥有
reus
2019-10-12 12:32:47 +08:00
通知结束用 context,等待结束用 wait group

https://play.golang.org/p/GGOY8mugpw4
hujianxin
2019-10-12 12:56:03 +08:00
@reus 嗯呢,了解了,我这种情况是等待结束。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/608499

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX