async fn
mengembalikan tipe anonim yang mengimplementasikan Future
, jadi jika kita ingin menggunakannya sebagai panggilan balik, kita perlu mengonversi nilai kembali ke objek sifat.
Saya mencoba menulis fungsi untuk melakukan ini, tetapi saya memiliki beberapa masalah seumur hidup.
async fn
akan mengembalikan seumur hidup semua parameter, sehingga tanda tangan panggilan balik juga perlu. Bagaimana saya bisa menambahkan masa pakai ke nilai balik dari callback?
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)
}
normalize_async_cb
pointer fungsi?