Size: a a a

Rust — русскоговорящее сообществo

2020 March 13

r

red75prime in Rust — русскоговорящее сообществo
Программа сразу прекращает работу? Без вывода сообщений?
источник

MF

Max Frai in Rust — русскоговорящее сообществo
Вместо
while let Some(task) = preloader_consumer.recv().await {
внутри loop, сделал как вы прописали let task = preloader_consumer.recv().await; и теперь все ок
источник

r

red75prime in Rust — русскоговорящее сообществo
Хм. С while let тоже должно было работать
источник

MF

Max Frai in Rust — русскоговорящее сообществo
red75prime а если мне нужно отправить ответ обратно конкретному продьюсеру, это нужно переходить на bounded и await?
источник

r

red75prime in Rust — русскоговорящее сообществo
Сделать чтобы продюсер создавал канал и добавить в task передающий конец канала.
источник

r

red75prime in Rust — русскоговорящее сообществo
Каналы однонаправленные
источник

MF

Max Frai in Rust — русскоговорящее сообществo
red75prime
Сделать чтобы продюсер создавал канал и добавить в task передающий конец канала.
Т.е. нужно перед отправкой события, создать еще один локальный one-shot, например, и передать продьюсера уже глобальному консьюмеру?
источник

r

red75prime in Rust — русскоговорящее сообществo
В продюсере let (tx, rx) = oneshot::channel(); task.tx = tx.clone(); send(task); let consumer_response = rx.await;
источник

MF

Max Frai in Rust — русскоговорящее сообществo
А мне же еще нужно отправить данные какие-то
источник

MF

Max Frai in Rust — русскоговорящее сообществo
Т.е. просто в типе передавать tupple (data, oneshot_producer) ?
источник

r

red75prime in Rust — русскоговорящее сообществo
Да
источник

MF

Max Frai in Rust — русскоговорящее сообществo
Спасибо, потихоньку начинаю понимать все это
источник

MF

Max Frai in Rust — русскоговорящее сообществo
Правда еще появится проблема дальше, уже реализация логики внутри этого воркера. Вот ему приходят таски, но сама логика это по сути огромный синхронный кусок. получается мне нужно будет внутри консьюмера запускать поток и все равно синхронизировать через мьютексы какую-то структуру с тасками?
источник

MF

Max Frai in Rust — русскоговорящее сообществo
Объясню чтобы понятней стало. Делаю пререндер SPA веб приложения, а логика это headless браузер, который с синхронным интерфейсом
источник

MF

Max Frai in Rust — русскоговорящее сообществo
Но этот браузер может, например, в 5 вкладках подгружать таски/адреса параллельно
источник

MF

Max Frai in Rust — русскоговорящее сообществo
Таски приходят, мне нужно их делать в очередь по 5 и отдавать через синхронный апи браузера ему задачи
источник

MF

Max Frai in Rust — русскоговорящее сообществo
Правильно ли будет в асинхронном методе, где я жду таски продьюсером, создать новый thread полноценный и отдавать туда какую-то хешмапу, куда писать таски?
источник

r

red75prime in Rust — русскоговорящее сообществo
источник

C

Calculon in Rust — русскоговорящее сообществo
red75prime
std::thread::sleep в асинхронном коде не нужен никогда, от слова совсем
Скажи это steam sdk
источник

MF

Max Frai in Rust — русскоговорящее сообществo
Ага, значит мне вместо thread::spawn в асинхронном нужно spawn_blocking, верно? А правильно ли будет создать структуру в мьютексе и шарить между тем, что внутри spawn_blocking и ее создателем?
источник