1
sender 소유권을 Option으로 감싸기
mpsc::Sender<Job>을 Option에 넣어 Drop에서 take()로 채널을 닫을 수 있게 합니다.
Option<Sender<Job>>예제 19-20의 코드는 의도한 대로 스레드 풀을 사용하여 비동기적으로 요청에 응답하고 있습니다. 직접적인 방식으로 사용하지 않는 workers, id 및 thread 필드에 대한 경고가 표시되어 아무것도 정리하고 있지 않음을 드러냅니다.
ThreadPool이 drop될 때 sender를 먼저 닫고, recv 대기 중인 worker가 루프를 빠져나온 뒤 JoinHandle::join으로 끝까지 기다리는 흐름입니다.
mpsc::Sender<Job>을 Option에 넣어 Drop에서 take()로 채널을 닫을 수 있게 합니다.
Option<Sender<Job>>sender가 drop되면 receiver.recv()가 Err를 반환하고 worker는 loop를 break합니다.
recv() Err => shutdownWorker의 thread 필드도 Option으로 두면 소유권을 꺼내 join()하고, 실행 중인 작업이 끝날 때까지 main thread가 기다립니다.
Option<JoinHandle<()>>