Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asynchronous 无法为自己推断出合适的寿命”;“要求是静态的”;_Asynchronous_Rust_Async Await_Rust Tokio - Fatal编程技术网

Asynchronous 无法为自己推断出合适的寿命”;“要求是静态的”;

Asynchronous 无法为自己推断出合适的寿命”;“要求是静态的”;,asynchronous,rust,async-await,rust-tokio,Asynchronous,Rust,Async Await,Rust Tokio,我正在对基于通道的系统进行原型设计,在将代码转换为使用异步任务时,我遇到了一个错误,即&mut self需要有一个适当的生存期 我已尝试将&mut self设置为&'static self,但不起作用。我尝试将整个代码包装在一个异步块中,返回Future+'static,但也不起作用 代码如下: struct RequestManager{ 连接状态:连接状态, 退避:u64, 指数:u32, 最大值:u64, } impl请求管理器{ 异步fn运行(&mut self,mut feed_队列:

我正在对基于通道的系统进行原型设计,在将代码转换为使用异步任务时,我遇到了一个错误,即
&mut self
需要有一个适当的生存期

我已尝试将
&mut self
设置为
&'static self
,但不起作用。我尝试将整个代码包装在一个异步块中,返回
Future+'static
,但也不起作用

代码如下:

struct RequestManager{
连接状态:连接状态,
退避:u64,
指数:u32,
最大值:u64,
}
impl请求管理器{
异步fn运行(&mut self,mut feed_队列:Receiver){
let(mut fetch_result_发送方,mut fetch_result_接收方)=信道(5);
let(mut-fetch\u-request\u发送方,mut-fetch\u-request\u接收方)=信道::(5);
让request\u sender=mpsc::sender::clone(&fetch\u result\u sender);
东京:产卵(异步移动){
环路{
匹配自连接状态{
ConnectionState::Closed=>{
而让一些(feed)=获取请求接收器。recv()。等待{
让mut request\u sender=mpsc::sender::clone(&request\u sender);
东京:产卵(异步移动){
let response=make_请求(&feed.feed_地址)。等待;
如果让错误(u)=响应{
自连接状态=
连接状态::半开(feed.feed_地址);
}否则{
让响应=读取响应体(response.unwrap())。等待;
let result=FetchResult{body:response};
如果let Err(e)=请求\发送方发送(结果)。等待{
eprintln!(“无法发送获取结果:{}”,e);
}
}
});
}
}
连接状态::半开放(url)=>{
let response=make_请求(&url)。等待;
如果让错误(u)=响应{
self.connection\u state=ConnectionState::Open(url);
}否则{
让响应=读取响应体(response.unwrap())。等待;
let result=FetchResult{body:response};
////TODO:发送到任务/feedService
连接状态=连接状态::关闭;
如果let Err(e)=获取\u结果\u发送方。发送(结果)。等待{
eprintln!(“无法发送获取结果:{}”,e);
}
}
}
ConnectionState::Open(url)=>{
让新的退避=计算退避();
延迟(持续时间:从秒开始(新的退避));
self.connection\u state=ConnectionState::半开放(url)
}
}
}
});
}
}

您正在使用哪些其他代码/库?(对于
连接状态
发出请求
读取响应
正文等)请将您的问题包含在内。通常最好是在上重现问题,但如果不能,则在新的Cargo项目中,共享重现问题所需的所有文件。如果你能用
todo替换整个函数体,那么就尽量减少它,以避免偏离正轨!()
、硬编码函数参数等。然后它将帮助我们回答您的问题。此外,请在问题中包含您得到的确切编译器错误,不要只告诉我们您对它的记忆。