下面这个例子的原意图是将这个异步方法存起来放进Vec中, 再在别的地方用unsafe恢复方法并运行. 因为方法都是编译期就知道大小的, 所以它的指针的地指应该是不变的, 内容也不变, 所以应该是安全的? 但是下面这个例子是编译不过的, 因为AsyncFn是Trait Object, 无法直接cast 成 *const ().
请问要怎么编写这段代码? (使用unsafe是故意的)
Ext Link: https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=e825dc6483bcf5097389e4a33221d13f
1
共 4 条评论, 1 页
评论区
写评论这玩法好复杂,核心问题是Out的类型可能要支持多个,导致必须使用Trait对象吧,遇到过类似的问题,后面解决的也不漂亮。
提一点浅见,Trait Object应该本来就不是指针,是栈上的对象吧,我觉得你可以用Box::Leak()试试
搞不定, 他的case和我的case不一样, 他的生命周期是在外面用+号串起来, 我这个是在泛型的<>里面的, 搞不懂
--
👇
Bai-Jinlin: 你参考这个吧 https://docs.rs/futures-task/0.3.28/src/futures_task/future_obj.rs.html
感谢!我晚上研究一下, 它的目标与我的似乎是一致的
--
👇
Bai-Jinlin: 你参考这个吧 https://docs.rs/futures-task/0.3.28/src/futures_task/future_obj.rs.html
你参考这个吧 https://docs.rs/futures-task/0.3.28/src/futures_task/future_obj.rs.html