rust tokio 使用
1、 主函数使用
new 一个 Runtime:
let rt = tokio::runtime::Builder::new_multi_thread().enable_all().build().unwrap();
rt.block_on(async move {
// some task with loop inner
loop{
}
});
let runtime = tokio::runtime::Builder::new_current_thread().build()?;
block_on 方法非常常用,可以用于在同步方法中调用异步方法。
2、 启动一个 async task
tokio::spawn(async move {
// a timer
let mut interval = time::interval(time::Duration::from_secs(5));
loop {
interval.tick().await;
}
});
3、oneshot channel
let (close_tx, close_rx) = oneshot::channel();
4、TokioMutex
5、 Handle
/// Returns a handle to the runtime's spawner.
///
/// The returned handle can be used to spawn tasks that run on this runtime, and can
/// be cloned to allow moving the `Handle` to other threads.
///
/// # Examples
use tokio::runtime::Runtime;
let rt = Runtime::new()
.unwrap();
let handle = rt.handle();
可以基于这个 handle 启动一个 task:
rt.spawn(async move {
///
});
6、#[tokio::main] 标注启动 async main
#[tokio::main]
pub async fn main() {
println!("Hello world");
}
等价于
fn main() {
tokio::runtime::Builder::new_multi_thread()
.enable_all()
.build()
.unwrap()
.block_on(async {
println!("Hello world");
})
}
7、tokio::task::spawn_blocking
8、tokio::time::sleep(Duration::new(1, 0)).await;
9、signal
struct ExitSignal(pub &'static str);
async fn listen_for_signals() -> Result<ExitSignal, String> {
let mut term_sig = signal(SignalKind::terminate())
.map_err(|e| format!("could not listen for TERM signals: {}", e))?;
let mut int_sig = signal(SignalKind::interrupt())
.map_err(|e| format!("Could not listen for INT signal: {}", e))?;
let sig_name = tokio::select! {
Some(_signal) = term_sig.recv() => {
"SIG_TERM"
},
Some(_signal) = int_sig.recv() => {
"SIG_INT"
},
};
Ok(ExitSignal(sig_name))
}
10、
转载请注明原文链接:https://www.cnblogs.com/itfanr/p/16969067.html
公众号:小弧光黑板报