169 похожих чатов

Привет всем. Игрался с генсервером и вот что понял. Раз уж

call синхронный, а cast - не возвращает ответа, то решил поставить pid отправителя в вызове GenServer.cast/2 и в функции hanlde_cast/2 отправить ответку на этот pid.
Меня сейчас интересует следующее - таким образом я всё будет работать в полном асинхронном режиме?

15 ответов

9 просмотров

Ну, если после cast не происходит receive, то всё будет ок Но я бы посоветовал глянуть на новые функции gen_server-а из OTP24

Սուրեն-Կիրակոսյան Автор вопроса
Lama Lover
Ну, если после cast не происходит receive, то всё ...

՝receive՝ происходит в том модуле, где произошёл вызов GenServer.cast/2. А без receive вообщем как возможно потом получить ответку - я не в курсе.

Սուրեն Կիրակոսյան
՝receive՝ происходит в том модуле, где произошёл в...

Кароче, call это типа cast и сразу же receive. Я это имел в виду

Lama Lover
Кароче, call это типа cast и сразу же receive. Я э...

Cast не вешает монитор и не падает с nodedown|noproc.

Denis
Cast не вешает монитор и не падает с nodedown|nopr...

Да, cast вообще много чего не делает. Я просто принцип описал

Как раз из-за того что cast не вешает монитора, лучше воспользоваться связкой send_request и (wait/receive)_response.

Սուրեն-Կիրակոսյան Автор вопроса
Denis
Как раз из-за того что cast не вешает монитора, лу...

Правильно понимаю, что Elixir пока не поддерживает эти колбэки?

Սուրեն Կիրակոսյան
Правильно понимаю, что Elixir пока не поддерживает...

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

Սուրեն-Կիրակոսյան Автор вопроса
Vladimir Sekisov
Это не коллбэки, а API клиента, пока в Elixir нет,...

Ну вот, понятно, придётся смотреть Erlang.

Սուրեն Կիրակոսյան
՝receive՝ происходит в том модуле, где произошёл в...

Если ответ придет в течении небольшого промежутка, например 5 секунд, то можно использовать handle_call со связкой noreply + reply через время

Սուրեն-Կիրակոսյան Автор вопроса
Anastasiya Dyachenko
Если ответ придет в течении небольшого промежутка,...

Круто, спасибо! Я где-то читал, что reply превращает синхронный вызов в асинхронный, а в документации говорится, что when the reply cannot be specified in the return value of handle_call/3., я не понимаю, когда это может понадобится при использовании call.

Սուրեն Կիրակոսյան
Круто, спасибо! Я где-то читал, что reply превраща...

Ответ в handle_call noreply отвязывает gen_server от немедленного ответа. reply(from, resp) он может ответить спрашивающему потом, когда захочет или вообще это сделает другой процесс, которому он делегирует вызов.

Սուրեն-Կիրակոսյան Автор вопроса
Vladimir Sekisov
Ответ в handle_call noreply отвязывает gen_server ...

Тогда почему бы не воспользоваться handle_cast?

Սուրեն Կիրակոսյան
Тогда почему бы не воспользоваться handle_cast?

потому что GenServer.cast не ждет ответа, а GenServer.call ждет

Похожие вопросы

Обсуждают сегодня

Всем привет, написал код ниже, но он выдает сегфолт, в чем причина? #include <stdio.h> #include <stdlib.h> #include <string.h> struct product { char *name; float price; };...
buzz базз
70
Всем доброго дня, ребят подскажите пожалуйста, если в курсе по ассемблеру используется MASM32, могу ли я использовать FASM? В чем явная разница и будет ли у меня все работать?
Botsman
17
Хотел бы спросить у знающих, правильную ли я выбрал книгу для начала изучения ассемблера Юрова В.И ? Или есть более лучшие книги для начала обучения?
Botsman
25
Книга Юрова В.И пойдёт для обучения?
Botsman
24
$params = [ 'formid' => 'feedbackForm', 'formTpl' => '@CODE: <form class="form-validate" data-id="ajax_form"> <fieldset class="margin-bottom-md"> ...
Pathologic
1
Люди добрые, помогите с идеями, потому что свои закончились. У клиента падает софтина в момент инициализации модуля OtlEventMonitor на RegisterWindowMessage('Gp/OtlTaskEvents/...
Михаил Усков
7
> Примечательно, что новый владелец удаляет из GitHub любые жалобы, указывающие на подозрительную активность или смену владельца, и, видимо, рассчитывает на то, что пользовате...
Alex Sherbakov
2
GridView fully ignored first parent(SizedBox), and take width from second parent(Container). How can I constrain GridView by first parent? Widget build(BuildContext context) {...
Hamster
1
Коллеги, добрый день. Есть такой вопрос: Есть модуль, который надо запустить через супервизор как дочерний процесс. Пока инстансов было нужно 8, всё было окей, но когда их ст...
Δημήτηρ
4
Hey there Which is the best Linux destro for developers (coding)? To my research on reddit, they said Linux mint is good for mid level spec and Ubuntu for high Lev hardwar...
Wiz 🪄
11
Карта сайта