Elixir GenServer handle_call тип обратного вызова - PullRequest
0 голосов
/ 23 октября 2018

Я использую GenServer, и я в замешательстве.

Я знаю, handle_cast является асинхронным, что означает, что вызывающая сторона не ожидает ответа, и мы возвращаем кортеж, подобный этому: {:noreply, new_state}.

Я заметил, что мы также можем вернуть тот же кортеж из handle_call.Означает ли это, что если у меня есть handle_call, который возвращает {:noreply, new_state}, он ничего не вернет, но будет синхронным?Поток вызывающего абонента будет ожидать команды GenServer.call, а затем продолжится после завершения функции handle_call?

1 Ответ

0 голосов
/ 23 октября 2018

Звонящий будет блокировать ожидание ответа whenever Вы вызываете GenServer.call.Причина, по которой handle_call принимает {:noreply, state} в качестве действительного возврата, состоит в том, что вы можете ответить / 2 вручную (из любого места).

Вызывающий процесс заблокирует ожидание reply (и время ожидания в соответствии с вашими настройками и т. Д.), Точно так же.

Второй аргумент handle_callback - это from ссылка, как в handle_call(msg, from, state), которая затем может использоваться с reply/2.

...