recoverable_thread_pool/worker/
impl.rs

1use super::r#type::Worker;
2use crate::thread_pool::r#type::ThreadPoolJob;
3use recoverable_spawn::*;
4use std::sync::{Arc, Mutex, mpsc::Receiver};
5
6impl Worker {
7    pub fn new(id: usize, receiver: Arc<Mutex<Receiver<ThreadPoolJob>>>) -> Option<Worker> {
8        sync::recoverable_spawn(move || {
9            loop {
10                if let Ok(receiver_lock) = receiver.lock() {
11                    if let Ok(job) = receiver_lock.recv() {
12                        let _ = sync::recoverable_spawn(job);
13                    }
14                }
15            }
16        });
17        return Some(Worker { id });
18    }
19}