У меня есть функция в Rust (которую я не писал), которая либо возвращает в миллисекундах, либо перемалывает в течение ~ 10 минут до сбоя.
Я хотел бы обернуть вызов этой функции во что-то, что возвращает Option
, равное None
, если для запуска требуется более 10 секунд, и содержит результат, если для запуска потребовалось меньше времени. Однако я не смог найти способ прервать оценку этой функции после ее вызова.
Например:
// This is the unpredictable function
fn f() {
// Wait randomly for between 0 and 10 seconds
let mut rng = rand::thread_rng();
std::thread::sleep(std::time::Duration::from_secs(rng.gen_range(0, 10)));
}
fn main() {
for _ in 0..100 {
// Run f() here but so that the whole loop takes no more than 100 seconds
// by aborting f() if it takes longer than 1 second
}
}
Я нашел несколько методов, которые могли бы работать использование фьючерсов с таймаутами, но я бы хотел минимизировать накладные расходы, и я не уверен, насколько дорого будет создавать будущее для каждого вызова этой функции, учитывая, что она будет вызываться так много раз.
Спасибо