Size: a a a

2021 February 02

r

red75prime in Rust Async
Клонировать надо. move || { let iteration = iteration.clone(); async move { ... } }
источник

IL

Ilya Lakhin in Rust Async
red75prime
Клонировать надо. move || { let iteration = iteration.clone(); async move { ... } }
Придется тогда каждый раз клонировать функцию?
источник

r

red75prime in Rust Async
Чтобы сделать iteration клонируемой можно засунуть её в Arc
источник

IL

Ilya Lakhin in Rust Async
Ну, это оверхед уже
источник

С

Сергей in Rust Async
клонировтаь саму функцию тоже оверхед
источник

IT

Ilya Titkov in Rust Async
если сделать + sync и убрать мувы тоже не работает?
источник

r

red75prime in Rust Async
Ilya Lakhin
Придется тогда каждый раз клонировать функцию?
можно попробовать просто async без move.
источник

IL

Ilya Lakhin in Rust Async
Ilya Titkov
если сделать + sync и убрать мувы тоже не работает?
Если совсем мувы убрать, он ругается, что новый async может пережить iteration
источник

С

Сергей in Rust Async
А iteration точно мувается внутрь async?
источник

IT

Ilya Titkov in Rust Async
без кода сверху и снизу, выглядит как гадание, конечно
источник

IL

Ilya Lakhin in Rust Async
Ладно, я пока ограничусь тем, что просто не буду всё это делать, пожалуй )
источник

IL

Ilya Lakhin in Rust Async
Видимо Раст считает, что я хочу слишком странного :)
источник

С

Сергей in Rust Async
Кажется путаница где-то тут. iteration - это функция, которая производит футуру, судя по сигнатуре. Я думаю, надо до асинка производить футуру и мувать внутрь уже её, а не сам iteration
```Function - это тип iteration(который изначально Function: Fn(TaskReference) -> Fut + Send + 'static)```
источник

IL

Ilya Lakhin in Rust Async
(что, в общем, почти правда)
источник

IL

Ilya Lakhin in Rust Async
Сергей
Кажется путаница где-то тут. iteration - это функция, которая производит футуру, судя по сигнатуре. Я думаю, надо до асинка производить футуру и мувать внутрь уже её, а не сам iteration
```Function - это тип iteration(который изначально Function: Fn(TaskReference) -> Fut + Send + 'static)```
Это нарушит конртакт с пользователем API. Теоретически он будет всё делать внутри производимой футуры, но на практике я должен гарантировать, что iteration не начнет исполняться, если не выполнено это самое условие с finish_flag. Такой контракт
источник

IB

Ivan Boldyrev in Rust Async
Ilya Lakhin
Это нарушит конртакт с пользователем API. Теоретически он будет всё делать внутри производимой футуры, но на практике я должен гарантировать, что iteration не начнет исполняться, если не выполнено это самое условие с finish_flag. Такой контракт
... Таков контракт.
источник

IL

Ilya Lakhin in Rust Async
Да! :)
источник

IL

Ilya Lakhin in Rust Async
Ну то есть, футура не должна выбрасываться в пустоту как бы
источник

r

red75prime in Rust Async
Ilya Lakhin
Это нарушит конртакт с пользователем API. Теоретически он будет всё делать внутри производимой футуры, но на практике я должен гарантировать, что iteration не начнет исполняться, если не выполнено это самое условие с finish_flag. Такой контракт
Тогда это должно выглядеть как-то так checked_iteration = |tr| async { flag.ready().await; iteration(tr).await };
источник

IL

Ilya Lakhin in Rust Async
red75prime
Тогда это должно выглядеть как-то так checked_iteration = |tr| async { flag.ready().await; iteration(tr).await };
Еслиб флаг был футурой, проблемы вообще бы не возникло )
источник