Size: a a a

2020 May 12

EK

Eduard Korolev in Go-go!
потому что я ловлю eof, завершаю горутину с чтения с потока ввода, вызываю cancel, а в горутине он должен прочитать кейс с <-ctx.Done
источник

E

Edgar in Go-go!
И в чем проблема прочитать?
источник

EK

Eduard Korolev in Go-go!
но оказывается что я не бегаю по циклу, а захожу в scan и все. Он там виснет намертво
источник

DP

Daniel Podolsky in Go-go!
он не виснет, он ждет данных
источник

EK

Eduard Korolev in Go-go!
вот и как прервать его? чтоб не ждал нафиг
источник

EK

Eduard Korolev in Go-go!
а закрыл connection. А когда закроется то и в scan eof придет наверн
источник

DP

Daniel Podolsky in Go-go!
придет
источник

DP

Daniel Podolsky in Go-go!
вариантов мало
источник

DP

Daniel Podolsky in Go-go!
я бы снабдил ваше чтение таймаутом, и оно бы вываливалось раз в N (милли)секунд

я бы проверял, не пора ли завершаться, и, если не пора - не таймаут ли моя ошибка. если таймаут - запускал бы чтение с таймаутом заново
источник

DP

Daniel Podolsky in Go-go!
как вариант - запустить в отдельной горутине тикер, который будет раз в N (милли)секунд отодвигать read deadline для соединения. и по cancel останавливать именно этот тикер
источник

C

Calculon in Go-go!
походу у него сценарий
for{
 select{
 case <- ctx.Done():
   return
 default:
   lalala, err := conn.Read()
 }
}
источник

C

Calculon in Go-go!
чтобы сразу выйти из цикла я убивал подключение
источник

C

Calculon in Go-go!
иначе надо ждать данные, а ждать не хотелось
источник

EK

Eduard Korolev in Go-go!
блин вот
источник

EK

Eduard Korolev in Go-go!
решил проблему, не знаю почему, но код тот же что и был
источник

EK

Eduard Korolev in Go-go!
источник

EK

Eduard Korolev in Go-go!
только в кейсе с done вместо break поставил return
источник

EK

Eduard Korolev in Go-go!
и все заработало
источник

EK

Eduard Korolev in Go-go!
не понимаю почему break тогда не выходил из цикла
источник

C

Calculon in Go-go!
кек
источник