From 1da292ca1e51d8710bdfba5e1bace3fe981cac34 Mon Sep 17 00:00:00 2001
From: Greg Burri <greg.burri@gmail.com>
Date: Tue, 18 Apr 2023 15:36:25 +0200
Subject: [PATCH 1/1] Simple example with spawn and join

---
 .gitignore  |  1 +
 Cargo.lock  |  7 +++++++
 Cargo.toml  |  8 ++++++++
 src/main.rs | 28 ++++++++++++++++++++++++++++
 4 files changed, 44 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 Cargo.lock
 create mode 100644 Cargo.toml
 create mode 100644 src/main.rs

diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..ea8c4bf
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+/target
diff --git a/Cargo.lock b/Cargo.lock
new file mode 100644
index 0000000..ead8c1c
--- /dev/null
+++ b/Cargo.lock
@@ -0,0 +1,7 @@
+# This file is automatically @generated by Cargo.
+# It is not intended for manual editing.
+version = 3
+
+[[package]]
+name = "concurrent"
+version = "0.1.0"
diff --git a/Cargo.toml b/Cargo.toml
new file mode 100644
index 0000000..6d8c0f2
--- /dev/null
+++ b/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "concurrent"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/src/main.rs b/src/main.rs
new file mode 100644
index 0000000..22a0f50
--- /dev/null
+++ b/src/main.rs
@@ -0,0 +1,28 @@
+use std::thread;
+
+fn main() {
+    spawn_and_join();
+}
+
+// Page 500.
+fn spawn_and_join() {
+    let mut handles = Vec::<thread::JoinHandle<_>>::new();
+    for i in 0..10 {
+        let h =
+            thread::spawn(move || {
+                if i == 5 {
+                    panic!("ERROR"); // Simulate an error.
+                }
+                println!("\nHello from thread {}", i);
+                i + 1
+            });
+        handles.push(h);
+    }
+
+    for h in handles {
+        match h.join() {
+            Ok(r) => println!("\nResult: {}", r),
+            Err(err) => println!("\nError: {:?}", err)
+        }
+    }
+}
\ No newline at end of file
-- 
2.49.0