```go
package main
type task struct {
begin int
end int
result chan int
}
func (t *task) do(group *sync.WaitGroup) {
sum := 0
for i := t.begin; i <= t.end; i++ {
sum += i
}
fmt.Printf("begin:%d,end:%d\n",t.begin,t.end)
t.result <- sum
group.Done()
}
func distributeTask1(taskChan chan task, resultChan chan int, wg *sync.WaitGroup) {
for t := range taskChan {
wg.Add(1)
go t.do(wg)
}
wg.Wait()
close(resultChan)
}
func distributeTask(taskChan chan task, resultChan chan int, wg *sync.WaitGroup) {
for t := range taskChan {
wg.Add(1)
go processTask(t,wg)
}
wg.Wait()
close(resultChan)
}
func processTask(t task,wg *sync.WaitGroup){
t.do(wg)
}
```