1 Star 0 Fork 3

Fengzhi/gkit

forked from menuiis/gkit 
Create your Gitee Account
Explore and code with more than 14 million developers,Free private repositories !:)
Sign up
文件
Clone or Download
or_done.go 658 Bytes
Copy Edit Raw Blame History
SongZhibin97 authored 2021-12-01 10:02 +08:00 . feat:顺序异步
package concurrent
import "reflect"
// OrDone 任意channel完成后返回
func OrDone(channels ...<-chan interface{}) <-chan interface{} {
switch len(channels) {
case 0:
// 返回已经关闭的channel 通知各个接受者关闭
c := make(chan interface{})
close(c)
return c
case 1:
return channels[0]
}
orDone := make(chan interface{}, 1)
go func() {
defer close(orDone)
var cases []reflect.SelectCase
for _, channel := range channels {
cases = append(cases, reflect.SelectCase{
Dir: reflect.SelectRecv,
Chan: reflect.ValueOf(channel),
})
}
// 选择一个可用的
reflect.Select(cases)
}()
return orDone
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/fengzhi_1/gkit.git
git@gitee.com:fengzhi_1/gkit.git
fengzhi_1
gkit
gkit
b6285053065d

Search