Какое минимальное значение в миллисекундах я могу дать тайм-ауту получения эрланга / эликсира? - PullRequest
0 голосов
/ 13 февраля 2020

В эрланге / эликсире получение l oop принимает необязательную опцию после истечения времени ожидания. Какое минимальное значение может быть задано в качестве параметра?

Вот мой код, установленный на 1 миллисекунду.

def tick do
 receive do
   after
     001 ->
       IO.puts("200ms seconds elapsed")
       tick()
   end
end

Ответы [ 3 ]

4 голосов
/ 13 февраля 2020

Наименьшее возможное значение времени ожидания составляет 0 миллисекунд . То есть вы ожидаете, что сообщение уже будет в очереди сообщений, а если это не так, вы не хотите его ждать.

Я попытался установить для тайм-аута отрицательное значение. Я ожидал, что это даст ошибку компиляции, но это не так. Вместо этого я получил ошибку времени выполнения:

** (ErlangError) Erlang error: :timeout_value

Это имеет смысл в некотором смысле, поскольку значение времени ожидания не обязательно должно быть константой: вы можете использовать значение переменной в качестве времени ожидания.

2 голосов
/ 13 февраля 2020

Как указано в документации для Kernel.SpecialForms.receive/1,

Необязательное условие after может быть дано в случае, если сообщение не было получено по истечении заданного периода ожидания, указано в миллисекундах [...]

При этом минимальное значение для интервала времени ожидания будет 0 мс , если ожидается, что сообщение быть во входящих уже когда дело доходит до receive/1.

0 голосов
/ 13 февраля 2020

Нашел мой ответ, он идет куда угодно, цифры.

...