Asynchronous 如何手动实现固定的自引用结构?

Asynchronous 如何手动实现固定的自引用结构?,asynchronous,rust,unsafe,rust-pin,Asynchronous,Rust,Unsafe,Rust Pin,我正在尝试为固定的自引用结构创建以下设计: 使用std::future::future; 使用std::marker::phantompinted; 使用std::pin::pin; 结构数据{} 结构数据结果{} 异步fn my_async(数据:&data)->DataResult{ 待办事项!() } ///固定结构的容器,其中 ///包含对self.data的引用。 结构MyAsyncContainer{ 数据:数据, 未来:选择, 解开:幻影, } impl MyAsyncContai

我正在尝试为固定的自引用结构创建以下设计:

使用std::future::future;
使用std::marker::phantompinted;
使用std::pin::pin;
结构数据{}
结构数据结果{}
异步fn my_async(数据:&data)->DataResult{
待办事项!()
}
///固定结构的容器,其中
///包含对self.data的引用。
结构MyAsyncContainer{
数据:数据,
未来:选择,
解开:幻影,
}
impl MyAsyncContainer{
fn新(数据:数据)->自{
自我{
数据,
fut:没有,
解开:幻影,
}
}
fn启动,功能:A)
哪里
A:FnOnce(&'A数据)->F,
{
让this=unsafe{self.get_unchecked_mut()};
// ????
设fut=func(&this.data);
//self被钉住了,但fut(还没有)被钉住,
//所以这应该是安全的
this.fut=Some(fut);
}
}
fn main(){
设data=data{};
让mut container=MyAsyncContainer::new(数据);
let pinted=unsafe{Pin::new_unchecked(&mut container)};
pinted.start(my_async);
}
start
函数可以编译,但是当我尝试编译
main
函数时,我得到以下错误:

错误[E0597]:`container`的寿命不够长
-->src/main.rs:48:46
|
48 | let pinted=不安全{Pin::new_unchecked(&mut container)};
|^^^^^^^^^^^^^^^^^^^^借来的价值寿命不够长
49 | pinted.start(my|u async);
50 | }
| -
| |
|“container”是在借来的时候掉在这里的
|当删除'container'并运行'MyAsyncContainer'类型的析构函数时,可以在此处使用借用`
有没有办法让这样的自引用结构正常工作

我确实考虑过使用asyc函数,比如:
async fn my\u async(数据:&data)->DataResult{
待办事项!()
}
异步fn数据包装(数据:数据)->DataResult{
my_异步(&数据)。等待
}
问题是我需要未来的类型是可命名的,因为它作为更大的异步库的一部分嵌入到另一个结构中

我读过,但它没有回答我的问题,尽管关于原始指针的观点很有帮助。我认为这些示例没有涵盖的关键区别是
myu async
函数,它确实需要通过引用获取一段数据。我无法将指针传递给它,而且我不清楚如何将指针转换为具有正确生命周期的引用。特别是,
my_async
需要防止在
&'static data
上操作和泄漏引用