feat: super 包新增 TryReadChannel、TryReadChannelByHandler 函数用于对 channel 尝试写入

This commit is contained in:
kercylan98 2024-01-19 17:15:55 +08:00
parent 756f823ca4
commit 959abff85f
1 changed files with 22 additions and 0 deletions

View File

@ -20,3 +20,25 @@ func TryWriteChannelByHandler[T any](ch chan<- T, data T, handler func()) {
handler()
}
}
// TryReadChannel 尝试读取 channel如果 channel 无法读取则忽略,返回是否读取成功
// - 无法读取的情况包括channel 已空、channel 已关闭
func TryReadChannel[T any](ch <-chan T) (v T, suc bool) {
select {
case data := <-ch:
return data, true
default:
return v, false
}
}
// TryReadChannelByHandler 尝试读取 channel如果 channel 无法读取则执行 handler
// - 无法读取的情况包括channel 已空、channel 已关闭
func TryReadChannelByHandler[T any](ch <-chan T, handler func(ch <-chan T) T) (v T) {
select {
case data := <-ch:
return data
default:
return handler(ch)
}
}