我正在构建一个小应用程序,它应该以rusoto
不同的时间间隔安排两个任务(基于 AWS SDK):每 X 秒运行一个任务,每 Y 秒运行另一个。
我找到crossbeam
了提供滴答计时器和select!
宏的板条箱,并将它们放在一起,如下所示:
fn main() -> Result<(), Error> {
let cloudwatch_client = rusoto_cloudwatch::CloudWatchClient::new();
let rt = Runtime::new().unwrap();
let tick_a = tick(Duration::from_secs(60));
let tick_b = tick(Duration::from_secs(30));
loop {
select! {
recv(tick_a) -> _ => {
rt.block_on(cloudwatch_client.put_metric_data( /* ... */ ));
},
/* similar for tick_b */
}
}
}
这会编译,但是程序会出现thread 'main' panicked at 'not currently running on the Tokio runtime.'
. 通过分析回溯,这似乎来自 Rusoto 调用。
我在这里想念什么?有没有办法使这项工作?有没有更好的方法来处理 Rust 中的任务调度?
请注意,这个问题似乎没有解决我的问题。这个问题从使用futures::executor::block_on
函数开始,然后通过使用block_on
tokio 实现的方法来解决Runtime
。我已经在使用中的block_on
方法了Runtime
。