1.Why must you often add move to the closure passed to thread::spawn, as in thread::spawn(move || println!("{:?}", v))?
2.What does the mpsc in std::sync::mpsc::channel() describe about the channel?
3.In the example let handle = thread::spawn(...); handle.join().unwrap();, what is the purpose of calling handle.join()?
4.According to the theory, what is the recommended approach for coordinating work between threads in Rust?
5.The theory contrasts Rust's move closures with C# lambdas captured in Task.Run. What is the key difference it highlights?
Answer every question to submit.