Можно ли указать время жизни результата функции asyn c? - PullRequest
0 голосов
/ 09 июля 2020

Мы можем написать следующее

fn foo<'a, 'b>(va: &'a (), vb: &'b ()) -> impl std::future::Future<Output = ()> + 'b {
    async {}
}

без использования ключевого слова async. Можем ли мы сделать то же самое с ключевым словом async?

Обычно мы пишем

async fn foo<'a, 'b>(va: &'a (), vb: &'b ()) {
    async {}
}

Но я не могу указать время жизни вывода 'b.

Пример предоставлен комментатором Кицу

Детская площадка

use std::cell::RefCell;

fn foo<'a, 'b>(va: &'a i32, vb: &'b RefCell<i32>) -> impl std::future::Future<Output = i32> + 'b {
    let mut t = vb.borrow_mut();
    *t += va;
    let x = *t;
    async move { x }
}

1 Ответ

2 голосов
/ 13 июля 2020

async fn всегда автоматически зависит от всех времен жизни от своих аргументов.

Нет синтаксиса для его изменения, потому что нет другой возможности. Это потому, что вызов async fn не запускает никакого кода из тела функции, а сохраняет только аргументы функции в возвращаемом Future. Будущее позже будет использовать аргументы при опросе, поэтому оно будет привязано ко всем временам жизни всех аргументов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...