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,

Другие вопросы по тегам