我是异步编程的新手,因此在不同的方法行为上挣扎。
考虑一下tokio在github仓库中给出的例子,chat.rs:
// snip
loop {
tokio::select! {
// A message was received from a peer. Send it to the current user.
Some(msg) = peer.rx.recv() => {
// do something
}
result = peer.lines.next() => match result {
// A message was received from the current user, we should
// broadcast this message to the other users.
Some(Ok(msg)) => {
// do something
}
Some(Err(e)) => {
// handle error
}
// The stream has been exhausted.
None => break,
},
}
}
// do something
使用loop select!与使用两个tokio::spawn相比的好处是什么呢?例如以下代码:
let handle_1 = tokio::spawn(async move {
while let Some(msg) = peer.rx.recv() {
// do something
}
});
let handle_2 = tokio::spawn (async move {
loop {
let result = peer.lines.next();
match result {
Some(Ok(msg)) => {
// do something
},
Some(Err(e)) => {
// handle error
},
None => break,
};
}
});
handle_1.await;
handle_2.await;
// do something