Урок 115 · Задача 1

ProcessResults: пул с каналом результатов

Пул с двумя каналами: tasks закрывает производитель, results — отдельная горутина после wg.Wait(). Реализуйте processAll: воркеры читают tasks и шлют в results.

00:00:00
Показать решение
GolangРешение
func processAll(items []int, workers int) []int {
	tasks := make(chan int)
	results := make(chan int)
	var wg sync.WaitGroup
	for i := 0; i < workers; i++ {
		wg.Add(1)
		go func() {
			defer wg.Done()
			for t := range tasks {
				results <- t * 2
			}
		}()
	}
	go func() {
		wg.Wait()
		close(results)
	}()
	go func() {
		for _, item := range items {
			tasks <- item
		}
		close(tasks)
	}()
	var out []int
	for r := range results {
		out = append(out, r)
	}
	return out
}
Наш сайт собирает куки. Чтобы тебе было удобнее им пользоваться. Нажимая на кнопку, ты даёшь разрешение собирать куки