pub async fn consume_budget()展开描述
消耗一个单位的预算;若 task 的协作预算已耗尽,则将执行权交回 Tokio 运行时。
只有当其整个 coop 预算都已耗尽时,任务才会让出。 此函数可用于在不使用 Tokio 资源(如 socket 或 semaphore) 的长时间计算中插入可选的让出点, 而无需每次都冗余地让出给运行时。
§示例
确保返回(可能大量)迭代值之和的函数是协作式的。
async fn sum_iterator(input: &mut impl std::iter::Iterator<Item=i64>) -> i64 {
let mut sum: i64 = 0;
while let Some(i) = input.next() {
sum += i;
tokio::task::consume_budget().await
}
sum
}