Size: a a a

2021 March 22

IB

Ivan Boldyrev in Rust Async
Mikail Bagishov
По идее, LocalSet надо гонять на отдельном потоке, и потом пересылать в него футуры, которые надо выполнить (ну вернее штуки вида FnOnce() -> Future).
Идея LocalSet как раз в том, чтобы ничего не пересылать, ибо он для !Send.
источник

MB

Mikail Bagishov in Rust Async
Ivan Boldyrev
Идея LocalSet как раз в том, чтобы ничего не пересылать, ибо он для !Send.
В обычной таске !Send-футуру выполнить точно не получится
источник

IB

Ivan Boldyrev in Rust Async
Mikail Bagishov
В обычной таске !Send-футуру выполнить точно не получится
Поэтому LocalSet :)
источник

MB

Mikail Bagishov in Rust Async
Ivan Boldyrev
Поэтому LocalSet :)
LocalSet тоже !Send, поэтому запустить его в обычной таске тоже не выйдет
источник

ph

pl 🦑 hk in Rust Async
а какие бывают кроме обычных?
источник

MF

Max Frai in Rust Async
ага, spawn_local вместо run_until и где-то отдельно сделать await
источник

MB

Mikail Bagishov in Rust Async
Ну еще бывают футуры, запущенные непосредственно в block_on, а также другие футуры, уже заспавненные в spawn_local.
источник

D

Dima in Rust Async
Max Frai
Подскажите, я раньше делал
tokio::task::spawn(async move {
Но мне нужно там использовать библиотеку где тип не Send. Посоветовали взять LocalSet:
local.run_until(async move {
все работает компилится, но мне не нужно блокировать поток и делать await на run_until, а без этого оно не выполняется. spawn же запускал логику и не требует await
а тип который  !Send я так понимаю используется сквозь вызовы await?
источник
2021 March 23

К

Крывашек in Rust Async
Max Frai
Подскажите, я раньше делал
tokio::task::spawn(async move {
Но мне нужно там использовать библиотеку где тип не Send. Посоветовали взять LocalSet:
local.run_until(async move {
все работает компилится, но мне не нужно блокировать поток и делать await на run_until, а без этого оно не выполняется. spawn же запускал логику и не требует await
Быть может, использовать пометку blocking для блока кода? Ничто никуда пересылаться не будет, выполнение произойдёт в исходном потоке; но event loop из него будет перемещён в другой поток, так что асинхронный рантайм не заблокируется.
источник

D

Denis in Rust Async
Крывашек
Быть может, использовать пометку blocking для блока кода? Ничто никуда пересылаться не будет, выполнение произойдёт в исходном потоке; но event loop из него будет перемещён в другой поток, так что асинхронный рантайм не заблокируется.
А как внутри блокинга футуры исполнять?
источник

MB

Mikail Bagishov in Rust Async
Ну, можно block_on сделать :)
источник

D

Denis in Rust Async
Тогда бы ему и локалсет подошёл
источник

ph

pl 🦑 hk in Rust Async
https://docs.rs/tokio/1.4.0/tokio/task/struct.LocalSet.html#use-inside-tokiospawn
там оказывается рассматривается кейс прямо в доке
источник

ph

pl 🦑 hk in Rust Async
у меня ложные воспоминания, или раньше локалсет можно было где угодно создавать?
источник
2021 March 25

N

NC in Rust Async
Привет всем!
источник

N

NC in Rust Async
Я заткнулся на проблеме, когда мне надо асинхронно раскидать куски работы из dashmap по фьючерсам и tokio:spawn, не могу доказать, что мапа переживает потоки. Собственно, строчка кода: https://github.com/NCrashed/bitcoin-utxo/blob/master/src/cache/utxo.rs#L217
источник

N

NC in Rust Async
У dashmap есть rayon итератор, но он не дружит с токио рантаймом напрямую :/
источник

N

NC in Rust Async
источник

S

Snarpix in Rust Async
Arc?
источник

N

NC in Rust Async
Кэш живёт в Arc
источник