Size: a a a

2021 May 24

KR

Kai Ren in Rust Async
Нет. Он запустит футуру выполнятся на текущем потоке.
источник

KR

Kai Ren in Rust Async
Т.е. не требует Send. В этом его смысл.
источник

F

Fortunato in Rust Async
т.е. он гарантирует, что конкретная !Send футура будет выполняться только в этом потоке, но при этом и другие футуры тоже в нём могу запускаться?
источник

F

Fortunato in Rust Async
Окей, чуть расширю вопрос: мне нужно запустить !Send футуру из не-async функции так, чтоб она не блокировала текущий рантайм.
Это я правильно в сторону tokio::task::spawn_local смотрю, или ещё куда-то надо?
источник

F

Fortunato in Rust Async
Т.е. по факту нужен аналог tokio::spawn на для !Send
источник

KR

Kai Ren in Rust Async
Да
источник

KR

Kai Ren in Rust Async
Да, правильно.
источник

KR

Kai Ren in Rust Async
Это он и есть.
источник

KR

Kai Ren in Rust Async
Только твоя не-`async` функция должна запускать на одном из тредов токио-рантайма. Это, думаю, очевидно.
источник

F

Fortunato in Rust Async
Ок, спасибо, продолжаю пробовать
источник

MB

Mikail Bagishov in Rust Async
Если ты еще не прочитал документацию про LocalSet, то стоит прочтесть. spawn_local это маленькая обертка над ним.
источник

F

Fortunato in Rust Async
Я читал, конечно. Не сразу всё в голове укладывается.
Вопрос выше пришлось решить с
let runtime_handler = tokio::runtime::Handle::current();
thread::spawn(move || {
   let maybe_server = cloned_self.server.lock();
       runtime_handler.block_on(async {
           server.stop(true).await;
            let _ = tx.send(Ok(()));
       })
});

т.е. без явного использования LocalSet в целом
источник

MB

Mikail Bagishov in Rust Async
спавн отдельного треда  это более дорогое решение, чем LocalSet, но тоже валидное.
источник

F

Fortunato in Rust Async
Там проблема в том, что spawn_local нужно запускать внутри LocalSet::run_until(), а он возвращает футуру, которую нужно эвейтить.
А у меня вызывающая функция не-async, так что только в отдельном треде, насколько я понимаю
источник

MB

Mikail Bagishov in Rust Async
Да, отдельный тред все равно придется запускать. Но с LocalSet ты сможешь на одном треде гонять много !Send-футур
источник

MB

Mikail Bagishov in Rust Async
Хотя кстати есть вариант гонять LocalSet прямо в мейне
источник
2021 May 27

KS

Kristina Ste in Rust Async
А есть какая-то возможность запустить async функцию из async главного треда так, чтобы она выполнялась параллельно основному?
источник

K

Kitsu in Rust Async
что за "асинк главный тред"?
источник

KS

Kristina Ste in Rust Async
источник

KS

Kristina Ste in Rust Async
Вот примерный код, в 40 строчке я хочу запустить параллельно прокси, который написан через async.
источник