【发布时间】:2018-06-30 15:31:15
【问题描述】:
我对 go func 中的普通 go func 和 for 循环之间的区别有一些疑问:
-
普通函数:
func asyncTask(){ //...something }为了触发asyncTask,我们可以很简单:
func main(){ go asyncTask() } -
创建一个for循环来监控通道:
func (c *Container) asyncTask(){ go func(){ for { select { case <- c.someChan: //...do something case <-c.ctx.Done(): //...prevent leaking } } }() }触发:
func (c *Container) trigger(){ c.someChan <- val }
我的问题是:
我理解第二种情况最适合我们希望在队列中管理异步任务的情况。 但是对于频繁触发的异步任务(不能被阻塞)的性能,哪种方法更好?
一般来说,在 GoLang 中处理异步任务是否有任何最佳实践?
【问题讨论】: