async fn
devuelve un tipo anónimo que se implementa Future
, por lo que si queremos usarlo como devolución de llamada, debemos convertir el valor de retorno en un objeto de rasgo.
Traté de escribir una función para hacer esto, pero tuve algunos problemas de por vida.
async fn
devolverá la vida útil de todos los parámetros, por lo que la firma de devolución de llamada también debe hacerlo. ¿Cómo puedo agregar la vida útil al valor de retorno de la devolución de llamada?
use futures::future::{Future, FutureExt, LocalBoxFuture};
type Context = ();
type AsyncCb = Box<dyn for<'r> FnOnce(&'r Context) -> LocalBoxFuture<'r, ()>>;
fn normalize_async_cb<Fut: Future<Output = ()>>(f: for<'r> fn(&'r Context) -> Fut) -> AsyncCb
// how to add 'r for Fut? ^^^
{
let cb = move |ctx: &Context| f(ctx).boxed_local();
Box::new(cb)
}
Además, ¿qué quieres decir con "devolución de llamada"? ¿Puede proporcionar un ejemplo que muestre dónde necesitaría este tipo de devolución de llamada?
—
Codificador-256
normalize_async_cb
un puntero de función?