我有一個遞歸函數。該函數將根據它獲得的數據使用各種不同的值調用自身,因此遞歸的數量和深度是未知的:每次調用可能會調用自己零次或多次。該函數可以返回任意數量的值。我想通過讓 goroutines 和通道參與進來來并行化它。每次遞歸都inner在自己的 goroutine中運行,并在通道上發回一個值。外部函數處理這些值。func outer(response []int) { results := make([]int) resultsChannel := make(chan int) inner := func(...) { resultsChannel <- ?some result?; // Recurse in a new goroutine. for _, recursionArgument in ?some calculated data? { go inner(recursionArgument) } } go inner(?initial values?); for { result := <- resultsChannel results = append(results, result) // HELP! How do I decide when to break? } return results}問題在于逃避結果通道循環。由于遞歸的“形狀”(未知的數量和深度),我不能說“在n 個事件后完成”,也不能發送哨兵值。如何檢測所有遞歸何時發生并從 返回outer?有沒有更好的方法來解決這個問題?
如何阻止(和加入)由未知數量的 goroutine 提供的通道?
慕的地6264312
2021-06-30 17:15:54
