run concurrently with channels and goroutines