I am a Rust beginner and I do not fully understand lifetimes. I wrote this code which throws an error:
use std::{
thread,
time
};
const BLOCKS_PER_DAY: u32 = 7200;
fn main() -> Result<(), std::io::Error> {
let end_block_number = 1_000_000;
let block_queries: Vec<u32> = ((end_block_number.as_u32() - BLOCKS_PER_DAY)..=end_block_number.as_u32()).collect();
let providers: Vec<u64> = vec![
1,
2,
3,
4,
5,
6
];
let mut providers_iter = providers.iter();
let query_amount_per_provider = block_queries.len() / providers.len();
let mut block_slices = block_queries.chunks(query_amount_per_provider);
let mut provider_handles = vec![];
while let (Some(blocks_to_query), Some(&provider)) = (block_slices.next(), providers_iter.next()) {
let handle = thread::spawn(move || {
for i in blocks_to_query {
// query block_number
println!("Provider {} querying block {}", provider, i);
let delay = time::Duration::from_millis(500 * provider);
thread::sleep(delay);
}
});
provider_handles.push(handle);
}
for handle in provider_handles {
handle.join().unwrap();
}
Ok(())
}
The error is "block_queries
does not live long enough. Borrowed value does not live long enough".
- I am not sure where the value is dropped.
- I do not understand how I can bypass the error and make the code work.