Asynchronous 在实现异步定时器时如何处理生存期? 背景
我正在Rust中通过http连接开发一个数据库管理器。数据库有一个身份验证过期策略,我需要在过期后通过重新登录在数据库管理器中保持连接 伪码 我的数据库管理器是Asynchronous 在实现异步定时器时如何处理生存期? 背景,asynchronous,timer,rust,async-await,Asynchronous,Timer,Rust,Async Await,我正在Rust中通过http连接开发一个数据库管理器。数据库有一个身份验证过期策略,我需要在过期后通过重新登录在数据库管理器中保持连接 伪码 我的数据库管理器是数据库,它有一些方法: 结构数据库{ 访问令牌:选项 } impl数据库{ 异步fn登录(&mut self,auth:Option){ 如果让一些(auth)=auth{ //如果用户提供auth,请使用auth登录 让响应=登录(auth)。等待; //从响应获取访问令牌 self.access\u token=Some(respon
数据库
,它有一些方法:
结构数据库{
访问令牌:选项
}
impl数据库{
异步fn登录(&mut self,auth:Option){
如果让一些(auth)=auth{
//如果用户提供auth,请使用auth登录
让响应=登录(auth)。等待;
//从响应获取访问令牌
self.access\u token=Some(response.access\u token);
}否则{
//如果用户未提供身份验证,请使用access\u令牌登录
do_登录(访问令牌)。等待;
}
重新启动计时器();
}
//重新启动登录计时器
fn重新启动\u计时器(&mut self){
self.cancel_timer();
self.do_启动计时器();
}
}
我的实现
我使用tokio来实现重启计时器
功能:
- 首先,我将一个字段
添加到timer:Option
数据库
- 然后,当调用
时,使用do\u start\u timer()
生成一个新任务,并将返回的连接句柄分配给tokio::spawn
self.timer
- 在
闭包中,我等待tokio::spawn
tokio::time::delay\u进行
,然后等待
登录
- 要取消计时器,我只需将
分配给self.timer
,使任务分离None
self.timer=Some(东京::产卵(异步移动{
东京:时间:延迟(/*…*/)。等待;
self.login().wait;
}));
上面的代码段位于do\u start\u timer
中,但无法编译:
expected `&mut Database`
found `&mut Database`
but, the lifetime must be valid for the static
我不知道该怎么办