Rust có cách "đóng" kênh, similar to what is available in Go không?Đóng kênh, như ở mục
Ý tưởng là lặp qua kênh (nhận liên tục) cho đến khi kênh cho biết rằng kênh sẽ không tạo thêm bất kỳ giá trị nào.
use std::sync::{Arc, Mutex};
use std::thread;
use std::sync::mpsc;
fn main() {
let data = Arc::new(Mutex::new(0u32));
let (tx, rx) = mpsc::channel::<u32>();
{
let (data, tx) = (data.clone(), tx.clone());
thread::spawn(move || {
for _ in 0..10 {
let mut data = data.lock().unwrap();
*data += 1;
tx.send(*data).unwrap();
}
// *** How could I close the channel here, to signal the work is done?
});
}
// *** How can I detect a closed channel here? Pattern matching?
for _ in 0..10 {
let x = rx.recv().unwrap();
println!("{}", x);
}
}
Bạn có mã nào đại diện cho những gì bạn đang cố gắng làm không? – tadman
@tadman [A khá ngớ ngẩn] Ví dụ đã thêm – jocull
tài liệu đã trả lời imo này: https://doc.rust-lang.org/nightly/std/sync/mpsc/struct.Sender.html#method.send Bỏ qua ' tx' (vì nó xảy ra sau vòng lặp for vì phạm vi kết thúc) sẽ làm cho 'rx' trả về' Err' thay vì 'Ok' trên' recv' tiếp theo. Sau đó, bạn có thể so khớp mẫu trên kết quả của 'recv' để kiểm tra' Ok' hoặc 'Err'. –