Size: a a a

2021 May 27

KS

Kristina Ste in Rust Async
Но через tokio::spawn он не работает в том смысле, что компилится, но сам прокси не запускается
источник

IT

Ilya Titkov in Rust Async
тебе надо proxy().await написать и убрать .await после tokio::spawn()
источник

KS

Kristina Ste in Rust Async
Тогда компилер ругается и говорит что dyn std::error::Error can not be sent between threads safely
источник

IT

Ilya Titkov in Rust Async
ну где-то в другом месте же уже?
источник

KS

Kristina Ste in Rust Async
Нет, в этом же самом.
источник

KR

Kai Ren in Rust Async
Box<dyn std::error::Error + Send> юзай
источник

KS

Kristina Ste in Rust Async
Мне в принципе подходит решение выделить отдельный thread для этого, так как нет проблемы с производительностью. Только не могу нагуглить, как это сделать в async main-е. Нужно использовать Threadpool или у токио есть свои возможности это сделать?
источник

IT

Ilya Titkov in Rust Async
tokio::spawn() как раз и есть та возможность.
Просто async fn футуры ленивые и когда ты пишешь tokio::spawn(async move { proxy(); }) (при условии, что proxy - async fn), то собственно просто ничего не происходит, то есть создается футура, но она не выполняется.

Поэтому ее там надо .await, чтобы она стала выполняться

Ну и с  + Send там правильное решение.
источник

KS

Kristina Ste in Rust Async
Спасибо за объяснение. Вопрос, await я так понимаю ее poll-ит в ожидание ответа, но моя футура это по сути бесконечный loop, который ничего не врзвращает. Может быть в этом проблема?
источник

П

Пух in Rust Async
Какую-то работу же она делает
источник

П

Пух in Rust Async
А, Send Sync доку читать
источник

IT

Ilya Titkov in Rust Async
поллит, верно. В этом была бы проблема, если бы она запускалась .await в основной ветке кода, а tokio::spawn() создает отдельную таску для этой футуры и она должна бежать параллельно в этом случае.
источник

IT

Ilya Titkov in Rust Async
https://play.rust-lang.org/?version=stable&mode=debug&edition=2018&gist=5e783307eca369763ec5b78f46756277

тут тоже бесконечный цикл, но он параллельно выполняется основному слипу
источник

DF

Dollar Føølish in Rust Async
все так, только 'конкуррертно' :)
источник

DF

Dollar Føølish in Rust Async
простите за буквоедстсво
источник

KS

Kristina Ste in Rust Async
Хм, поставила в сигнатуре Result<(), Box<dyn std::error::Error + Send>>, все равно выдает ту же ошибку. Метод proxy не возвращает никакой Error.
источник

KS

Kristina Ste in Rust Async
Это ведь работает в стэйбл расте или нужно помечать как анстейбл?
источник

MB

Mikail Bagishov in Rust Async
Текст ошибки должен упоминать конкретное место в коде
источник

KS

Kristina Ste in Rust Async
Сорри, все в том же месте, tokio::spawn
источник

MB

Mikail Bagishov in Rust Async
По-моему там должна быть приписка типа future is not Send because ...
источник