Size: a a a

2020 November 23

AZ

Alexander Zaitsev in Rust Async
ещё вопрос -  а как в актиксе принято внутри актора дёргать асинхронные функции?
источник

KR

Kai Ren in Rust Async
Alexander Zaitsev
ещё вопрос -  а как в актиксе принято внутри актора дёргать асинхронные функции?
Были какие-то надстройки для удобного async'а, но я не вникал. "Дедовской способ" - это результатом Handler делать ActorFuture, в которую и конвертиться из обычной. Ну и иногда, когда результат не важен, можно просто спавнить футуру на контексте самого актора.
источник

AZ

Alexander Zaitsev in Rust Async
Kai Ren
Были какие-то надстройки для удобного async'а, но я не вникал. "Дедовской способ" - это результатом Handler делать ActorFuture, в которую и конвертиться из обычной. Ну и иногда, когда результат не важен, можно просто спавнить футуру на контексте самого актора.
я мб не так выразился. я имею в виду внутри самого хендлера просто вызвать async функцию
источник

KR

Kai Ren in Rust Async
Alexander Zaitsev
я мб не так выразился. я имею в виду внутри самого хендлера просто вызвать async функцию
Все верно. Вызов асинк-функции делает твой хэндлер асинхронным. Если он асинхронный - значит он не может вернуть результат мгновенно и должен возвращать ActorFuture с результатом.
источник

d

diabolo in Rust Async
Alexander Zaitsev
если спавнить акторы через run_in_tokio, то оно также продолжает спавнить N рантаймов?
+
источник

d

diabolo in Rust Async
ну и к тому же, акторы — это акторы
источник

d

diabolo in Rust Async
Alexander Zaitsev
я мб не так выразился. я имею в виду внутри самого хендлера просто вызвать async функцию
никто не мешает, вообще как акторы работают знаешь?
источник

АГ

Алексей Герасимов... in Rust Async
проблема с async функциями (а точнее с ипользованием await) в том, что функция не может захватывать актора между await
источник

d

diabolo in Rust Async
блин, это акторы, какие нахрен захваты?
источник

d

diabolo in Rust Async
есть синк акторы, есть асинк актор
источник

d

diabolo in Rust Async
и все это в актиксе никто не отменял
источник

d

diabolo in Rust Async
или вы про то, что интерфейс не подогнан под async/.await?
источник

АГ

Алексей Герасимов... in Rust Async
diabolo
или вы про то, что интерфейс не подогнан под async/.await?
+
источник

d

diabolo in Rust Async
ну так я не вижу в этом смысла
источник

АГ

Алексей Герасимов... in Rust Async
как внутри хэндлера await-ить и менять состояние актора при этом?
источник

d

diabolo in Rust Async
Алексей Герасимов
как внутри хэндлера await-ить и менять состояние актора при этом?
какого именно? если я не вижу что, то я не знаю как)
источник

d

diabolo in Rust Async
ты скажи че хочешь, может и родим rt с мордой
источник

d

diabolo in Rust Async
если ты чётко про актикс, а не про его веб–часть
источник

АГ

Алексей Герасимов... in Rust Async
diabolo
какого именно? если я не вижу что, то я не знаю как)
impl Handler<MyMessage> for MyActor {
 fn handle(&mut self, message: MyMessage, ctx: …) -> ActorFuture<…> {
   async {
     let response = requests.get(…).await?;
     self.data = response.data;
     let another_data = requests.post(self.field).await?;
     self.another_data = another_data;
   }.into_actor_future()
 }
}

очень псевдокод, точных сигнатур не помню, но суть я думаю понятна. нужно как-то в стандартных футурах получать доступ к состоянию актора
источник

d

diabolo in Rust Async
Алексей Герасимов
impl Handler<MyMessage> for MyActor {
 fn handle(&mut self, message: MyMessage, ctx: …) -> ActorFuture<…> {
   async {
     let response = requests.get(…).await?;
     self.data = response.data;
     let another_data = requests.post(self.field).await?;
     self.another_data = another_data;
   }.into_actor_future()
 }
}

очень псевдокод, точных сигнатур не помню, но суть я думаю понятна. нужно как-то в стандартных футурах получать доступ к состоянию актора
так, это пример не чистого актора, а актора из actix-web!
короче, сделать сможешь на хабе или лабе чего хочешь с описанием?
я тебе или нарисую как, или, заведешь ишью и будем делать, по ходу назрело
источник