История изменений
Исправление vlad9486, (текущая версия) :
Вытаскивать значение не нужно. Пусть оно всегда будет в какой-то футуре. Скармливаешь рантайму футуру, которая реализует все твое приложение и внутри все делаешь. Для этого в токио есть макрос.
[tokio::main]
async fn main() {
// ...
}
Он разворачивается во что-то типа
fn main() {
tokio::runtime::Runtime::new().unwrap().spawn(async {
// ...
});
}
Если прямо нужно понять как можно было бы подождать, то попробуй
let mut f = async {
// code
};
let mut f = unsafe { Pin::new_unchecked(&mut f) };
loop {
match f.poll() {
Poll::Pending => (),
Poll::Ready(x) => break x,
}
}
Этот цикл вернет x – то, что возвращает тот асинк блок.
Исходная версия vlad9486, :
Вытаскивать значение не нужно. Пусть оно всегда будет в какой-то футуре. Скармливаешь рантайму футуру, которая реализует все твое приложение и внутри все делаешь. Для этого в токио есть макрос.
[tokio::main]
async fn main() {
// ...
}
Он разворачивается во что-то типа
fn main() {
tokio::runtime::Runtime::new().unwrap().spawn(async {
// ...
});
}
Если прямо нужно понять как можно было бы подождать, то попробуй
let mut f = async {
// code
};
let mut f = unsafe { Pin::new_unchecked(&mut f) };
loop {
match f.poll() {
Poll::Pending => (),
Poll::Ready(x) => break x,
}
}
Этот цикл вернет x - то, что возвращает тот асинк блок.