- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我在使用 defer wg.Done 和 channel 时遇到问题。
如果我像下面这样编码,就没有问题。
for i := 0; i < ntasks; i++ {
wg.Add(1)
go func(args DoTaskArgs) {
// defer wg.Done()
for {
worker := <-registerChan
ok := call(worker, "Worker.DoTask", &args, nil)
if ok {
wg.Done()
// go func() {
registerChan <- worker
// }()
break
}
}
}(DoTaskArgs{jobName, mapFiles[i], phase, i, n_other})
}
wg.Wait()
但如果我使用 defer wg.Done()
,代码将被卡住,除非包装 registerChan <- worker
与 go func
.
for i := 0; i < ntasks; i++ {
wg.Add(1)
go func(args DoTaskArgs) {
defer wg.Done()
for {
worker := <-registerChan
ok := call(worker, "Worker.DoTask", &args, nil)
if ok {
// go func() {
registerChan <- worker
// }()
break
}
}
}(DoTaskArgs{jobName, mapFiles[i], phase, i, n_other})
}
wg.Wait()
这里有什么问题?
最佳答案
好吧,首先,您的 channel 使用困惑并且会阻塞。在 goroutine 中,它从 channel 中读取。但没有写入任何内容。
我不认为你的问题与延迟有任何关系。
关于go - 与 defer wg.Done 和 channel 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49227513/
var wg sync.WaitGroup var v int32 = 0 for i = 0; i < 100; i++{ go func(){ wg.Add(1) // wro
1。我触发了一个 goroutine(运行第三方程序),我正在使用 wg.Wait() 等待它完成 2。在 wg.Wait() 之前,我想为用户提供一个选项来取消正在运行的第三方程序(如果他愿意的话)
假设我有一个函数 IsAPrimaryColour(),它通过调用其他三个函数 IsRed()、IsGreen() 和 来工作>IsBlue()。由于这三个功能彼此相当独立,因此它们可以同时运行。返回
假设我有一个函数 IsAPrimaryColour(),它通过调用其他三个函数 IsRed()、IsGreen() 和 来工作>IsBlue()。由于这三个功能彼此相当独立,因此它们可以同时运行。返回
我在使用 defer wg.Done 和 channel 时遇到问题。 如果我像下面这样编码,就没有问题。 for i := 0; i < ntasks; i++ { wg.Add(1)
我有一个要抓取的网址列表。我想做的是将所有成功抓取的页面数据存储到一个 channel 中,当我完成后,将其转储到一个 slice 中。我不知道我会得到多少成功的抓取,所以我不能指定一个固定的长度。我
我正在使用 PIC-IoT WG wifi 开发板开展一个项目。我正在尝试修改演示代码以便能够在我自己的服务器上使用它。该演示在多个地方使用了这样的代码: #include static void
我有一个示例代码(您可以在 Go Playground 上找到它): package main import ( "fmt" "sync" "time" ) func main
关闭。 这个问题不符合 Stack Overflow guidelines 。它目前不接受答案。 这个问题似乎与 a specific programming problem, a software
所有在 Debian 9+ 上运行都没有问题,使用相同的设置和安装方法。 当我尝试启动服务时 systemctl start wg-quick@wg0 它在日志中显示错误: wg-quick[9290
我目前正在开发一个用 java 实现的已安装桌面应用程序。我打算将 Google Calendar API 集成到应用程序中。 在授权过程中,我来到了这个阶段,我只能通过触发显示用户同意页面的浏览器来
我是一名优秀的程序员,十分优秀!