Elixir GenServer handle_call тип обратного вызова
Я внедряю GenServer, и я в замешательстве.
я знаю handle_cast
является асинхронным, что означает, что вызывающая сторона не ожидает ответа, и мы возвращаем кортеж, подобный этому: {:noreply, new_state}
,
Я заметил, что мы также можем вернуть тот же кортеж из handle_call
, Означает ли это, если у меня есть handle_call
это возвращает {:noreply, new_state}
, ничего не вернется, но будет синхронным? Поток звонящего будет ждать на GenServer.call
команда, а затем продолжить после handle_call
функция завершена?
1 ответ
Звонящий заблокирует ожидание ответа whenever
Вы вызываете GenServer.call. Причина для handle_call
принять {:noreply, state}
в качестве действительного возврата, чтобы позволить вам ответить /2 вручную (из любого места).
Вызывающий процесс заблокирует ожидание reply
(и время ожидания в соответствии с вашими настройками и т. д.), то же самое.
Второй аргумент handle_callback
это from
ссылка, как в handle_call(msg, from, state)
, которые затем могут быть использованы с reply/2
,