понедельник, 18 октября 2021 г.

Golang tips&tricks: таймауты и крайние сроки

Чтобы отказаться от синхронных вызовов, которые выполняются слишком долго, используйте оператор select с time.After:

import "time"

c := make(chan error, 1)
go func() { c <- client.Call("Service.Method", args, &reply) } ()
select {
  case err := <-c:
    // использование err и reply
  case <-time.After(timeoutNanoseconds):
    // истечение времени вызова
}

Обратите внимание, что канал c имеет размер буфера 1. Если бы это был небуферизованный канал и метод client.Call занимал больше времени timeoutNanoseconds, передача канала заблокировалась бы навсегда, и горутина никогда не была бы уничтожена.


Читайте также:


Комментариев нет:

Отправить комментарий