for scanner.Scan() {
                  
                  
                      select {
                  
                  
                      case <-ctx.Done():
                  
                  
                        log.Infoln("signal cancel")
                  
                  
                        break
                  
                  
                      default:
                  
                  
                        // тут что-то делаем
                  
                  
                      }
                  
                  
                    }
                  
                  
                    if err := scanner.Err(); err != nil && err != io.EOF {
                  
                  
                      log.Errorln(err)
                  
                  
                    }
                  
                  
                    close(tasks)
                  
                  
                  }()
                  
                  
                  
                  
                  
                  подскажите, почему не прерывается цикл сканера при завершении контекста?
                  
                  
                  весь цикл все равно пробегается до конца и выполняется только вывод лога "signal cancel" по количеству строчек в сканере
                  
                  
                
Добавьте 'label' к вашему for. И прерывайте его LOOP: for{ select { ...... break LOOP
Обсуждают сегодня